当先前函数完成时运行函数
2017-5-24 17:17:12
收藏:0
阅读:135
评论:1
我有下面两个函数,我需要按顺序执行它们,只有在第一个函数完成后才运行第二个函数。但是,这并没有发生,只输出第二个函数。
在原始 Lua 中,我们可以使用 CALLBACK_MANAGER:FireCallbacks 和 CALLBACK_MANAGER:RegisterCallback 来处理此问题。我该如何在 esp8266 中继续操作?
-- test.lua
function increase()
a = 0
tmr.alarm(1,1000,1,function()
if (a == 10) then
tmr.stop(1)
else
a = a + 1
end
print(a)
end)
end
function decrease()
a = 10
tmr.alarm(1,1000,1,function()
if (a == 0) then
tmr.stop(1)
else
a = a - 1
end
print(a)
end)
end
function start()
increase()
decrease()
end
start()
输出
➜ test git:(master) ✗ nu exec test.lua
➜ test git:(master) ✗ nu terminal
-- output
--- Miniterm on /dev/cu.wchusbserial1410 115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
10
9
8
7
6
5
4
3
2
1
有什么想法吗?先感谢了!
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

-- test.lua
```lua function increase() a = 0 tmr.register(1,1000,tmr.ALARM_SEMI,function() -- 注册第一个定时器 if (a == 10) then tmr.unregister(1) -- 注销第一个定时器 if tmr.state(2) ~= nil then tmr.start(2) -- 如果第二个定时器已经注册,启动它 end else a = a + 1 end print(a) end) tmr.start(1) -- 启动第一个定时器 end
function decrease() b = 10 tmr.alarm(2,1000,tmr.ALARM_SEMI,function() -- 注册第二个定时器 if (b == 0) then tmr.unregister(2) -- 注销第二个定时器 else b = b - 1 end print(a) end) end
function start() increase() -- 注册并启动第一个定时器 decrease() -- 注册第二个定时器 end
start() -- 开始
-- 可能的解决方案:
-- 1.在由第一个定时器调用的函数中调用
decrease。 -- 2.使代码更清晰,使用函数参数将回调传递给increase(然后执行与第一点相同的操作)(如果传递给函数参数的内容发生更改,则可能需要将其移动到全局范围,作为某种临时变量;这是由nodemcu本身的性质决定的)。 -- 3.将decrease定时器注册为第二个定时器,并在increase的回调中启动它。 -- 4.将其拆分为注册,启动和回调:首先使用两个不同的回调(一个用于减少,另一个用于增加)注册两个定时器,然后启动第一个定时器,从其回调内部开始,当完整循环完成时 - 启动第二个定时器,并注销第一个定时器(基本上是前一个点,但略微扩展)。 -- 5.创建第三个定时器,等待第一个定时器完成,以便启动第二个定时器。 -- 6.可能的其他解决方案,例如挂起decrease定时器并稍后恢复它。还应考虑不要使用神奇的数字,例如使用
tmr.ALARM_SEMI。定时器还有类似OOP的模型,因此如果您更愿意使用它,则更容易进行操作。 有关此内容的更多信息,请参见 tmr文档。