Advertisement
Guest User

Untitled

a guest
Nov 27th, 2015
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.66 KB | None | 0 0
  1. local promise = require("promise")
  2.  
  3. local create, resume, status, await =
  4. coroutine.create, coroutine.resume,
  5. coroutine.status, coroutine.yield
  6.  
  7. local function async(fn)
  8. return function(...)
  9. local args = {..., n = select("#", ...)}
  10. local co = create(fn)
  11.  
  12. return promise(function(resolve, reject)
  13. local function continue(...)
  14. local success, value = resume(co, ...)
  15.  
  16. if success == false then
  17. reject(value)
  18. elseif status(co) == "dead" then
  19. resolve(value)
  20. else
  21. value:next(continue, reject)
  22. end
  23. end
  24.  
  25. continue(unpack(args, 1, args.n))
  26. end)
  27. end
  28. end
  29.  
  30. return async, await
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement