Lua中协程的使用

    平常访问网络都会使用回调的方式,现在通过协程改变这种回调的模式,让异步方法按同步的方法来使用

-- co.lua
yield   = coroutine.yield
co      = function(func, cb) local cor = coroutine.create(func) local next = coroutine.resume local hasNext; hasNext = function(status, func, ...) -- suspended if not status then return end -- only function if type(func) == "function" then -- call function func(--[[callback]]function(...) hasNext(next(cor, ...)) end) elseif cb then cb(func, ...) end end hasNext(next(cor)) end



-- test.lua
require("co")

-- 网络异步操作
function request(url) return function(next) ... next("网络返回结果") end end -- 运行一个协程方法 co(function() local result = yield(request("http://login.9173.com")) local result_json = json.decode(result) if result_json.ok then -- other code end end)



这里一共使用了两个函数coyield


co接收一个函数为参数,该函数由coroutine协程去执行

yield接收一个函数为参数,传入的函数会有一个next函数类型的参数,返回值为next函数传入的值,即

local result = yield(function(next)
    next("success") -- 调用next()表示该函数运行结束,如果没有返回值直接next()即可 end) -- result: success

转载于:https://www.cnblogs.com/houmingamedevelop/p/5639737.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值