首页 > 其他分享 >lua版promise实现3 - 条件判断例子

lua版promise实现3 - 条件判断例子

时间:2024-08-16 23:27:43浏览次数:7  
标签:obj1 function end SetFinished lua 例子 promise local 加载

针对:先加载资源A,加载完A再加载资源B,加载完B再加载资源C。

现在加需求了,如果加载资源A的时间不超过3s,那说明当前设备性能不错,会额外再加载高品质资源A2,A3,然后再加载B。

 

local obj1 = PromiseV1.new()
local time1 = os.time()
AsyncLoadRes("ResA", function(textA)
    obj1:SetFinished(textA)
end)

local loadResB = function(textA, _obj2)
    print("ResA load finish")
    local deltaTime = os.time() - time1
    if deltaTime < 3 then
        local obj1_1 = PromiseV1.new()
        AsyncLoadRes("ResA1", function(textA1)
            obj1_1:SetFinished(textA1)
        end)

        local loadResA2 = function(textA1, _obj1_2)
            print("ResA1 load finish")
            AsyncLoadRes("ResA2", function(textA2)
                _obj1_2:SetFinished(textA2)
            end)
        end
        local obj1_2 = obj1_1:Next(loadResA2)

        local loadResB = function(textA2, _obj1_3)
            print("ResA2 load finish")
            AsyncLoadRes("ResB", function(textB)
                _obj2:SetFinished(textB)
            end)
        end
        local obj1_3 = obj1_2:Next(loadResB)
    else
        AsyncLoadRes("ResB", function(textB)
            _obj2:SetFinished(textB)
        end)
    end
end
local obj2 = obj1:Next(loadResB)

local loadResC = function(textB, _obj3)
    print("ResB load finish")
    AsyncLoadRes("ResC", function(textC)
        _obj3:SetFinished(textC)
    end)
end
local obj3 = obj2:Next(loadResC)

local printContent = function(textC, _obj4)
    print("ResC load finish, all loaded")
end
local obj4 = obj3:Next(printContent)

 

上面代码的加载链情况

 

标签:obj1,function,end,SetFinished,lua,例子,promise,local,加载
From: https://www.cnblogs.com/sailJs/p/18362034

相关文章

  • 合宙Air780EP模组LuatOS脚本开发MQTT应用示例
    本文详细讲解了基于合宙Air780EP模组LuatOS开发的多个MQTT应用示例。本文同样适用于合宙的以下型号:Air780EPA/Air780EPT/Air780EPSAir780E/Air780EX/Air201…一、相关准备工作1.1硬件准备合宙EVB_Air780EP开发板一套,包括天线、SIM卡;USB线PC电脑1.2软件准备登录合宙......
  • openresty通过lua实现ip地址hash
    实验环境:root@paas-test-ubuntu:/opt/openresty#bin/openresty-Vnginxversion:openresty/1.25.3.2builtbygcc11.4.0(Ubuntu11.4.0-1ubuntu1~22.04)builtwithOpenSSL3.0.215Mar2022TLSSNIsupportenabledconfigurearguments:--prefix=/opt/openresty/n......
  • 小白的学习笔记1:接口和多态,以及例子
    2024.8.21.接口接口即为一个抽象的方法,此方法定义了很多种行为,可供类们去实现,而避免了使用多种重复的else……if,while等即时运算。抽象,即为更上层的概念。比如“男人”的抽象为“人”,“人”的抽象为动物,这就是一个统领的节点。以下为示例publicclassDemo1{publicinterfa......
  • Fdmemtable 内存表保存图片的例子
    varaStream:TMemoryStream;LDataSet:TFDDataSet;//申请一个FD数据集MyStream:Tmemorystream;MyJPEG:TJpegImage;MyPng:TPngImage;begininherited;ifimg2.Picture.Graphic=nilthenbeginApplication.MessageBox('没有图片可以增加!!','提示'......
  • JS 对象与数组互相嵌套的复杂例子
    JS写法如下:constmyObj={name:"John",age:30,cars:[{name:"Ford",models:["Fiesta","Focus","Mustang"]},{name:"BMW",models:["32......
  • 在C/C++中嵌入Lua代码及使用VS Code调试
     Lua在设计之初就是为了嵌入到应用程序中,为这些应用程序提供灵活的扩展和定制功能。Lua的核心是用C语言编写的,所以Lua脚本可以很容易地与C/C++代码进行交互,通过Lua脚本,用户可以在不修改原有C/C++代码的基础上,实现功能的扩展和定制。 在C/C++程序中可以使用Lua来编写一些需......
  • Blob测量(例子)
      通过定位黑色塑料件的中心位置来定位目标,代码流程median_image中值滤波,去除亮点和暗点,让图片模糊化threshold阈值二值化,获取塑料件select_shape去除细小的干扰 dev_close_window()list_files('Pic',['files','follow_links'],ImageFiles)tuple_rege......
  • js异步之Promise使用
    Promise是异步编程的一种解决方案,是一个对象,可以获取异步操作的消息,大大改善了异步编程的困难,避免了回调地狱,比传统的解决方案回调函数和事件更合理和更强大。从语法上讲,Promise是一个对象,它可以获取异步操作的消息。提供了一个统一的API,各种异步操作都可以用同样的方法进行处理......
  • lua版promise实现 - 从异步回调多层嵌套开始
    异步回调代码,很容易就写出下面这样的不断嵌套的代码。如果还夹杂着各种逻辑的话,可读性会很差,还容易出错。AsyncLoadRes("ResA",function(textA)print("ResAloadfinish")AsyncLoadRes("ResB",function(textB)print("ResBloadfinish")AsyncLoad......
  • 一个单机多卡训练模型的例子
    """Mydemotrainscript."""importargparseimportloggingimportosimportrandomimporttimeimportnumpyasnpimporttorchfromtorchimportnn,optim,Tensorfromtorch.utils.dataimportDataLoader,Datasetdefparse......