Lua 异步封装
在lua里面的异步代码主要是通过闭包实现,结合asio,一些简单的封装,方便编写异步代码,比如异步的while,异步的for等
useage:
--[[ * Author: caoshanshan * Email: me@dreamyouxi.com 异步lib 封装 方便快速写异步lua代码 @see useage ]] local t = { } -- 异步循环调用 直到成功 或者达到深度 -- cb需要执行的函数 第一个参数是async对象,调用async:_continue() 继续执行 -- auto_run run auto ? if not you should call it manual -- max run depth ,just for avoid run forever function t.async_while_true(cb, auto_run, MAX_DEPTH) local depth = 0; if auto_run == nil then auto_run = true; end MAX_DEPTH = MAX_DEPTH or 1000; local obj = { }; obj.run = true; obj.cb = cb; obj._continue = function(self) if self.run and depth < MAX_DEPTH then depth = depth + 1; self:cb(); else -- print(" out of range"); end end obj._break = function(self) self.run = false; end if auto_run then obj:_continue(); end return obj; end return t; useage: function t.ttttt(ctx, msg, cb) local redis_key = redis_key.get_uuid_gen(); async.async_while_true( function(async) redis.incr(redis_key, function(v) if v and v ~= "" then local ok = uuid_helper.check_is_valid(v); if ok then local uuid = v; cb(uuid); else -- re gen async:_continue(); return; end end end ) end ); end