diff --git a/lib/init.lua b/lib/init.lua index a8ca86e..3c32a17 100644 --- a/lib/init.lua +++ b/lib/init.lua @@ -339,7 +339,9 @@ function Promise.promisify(callback) return function(...) local length, values = pack(...) return Promise.new(function(resolve) - resolve(coroutine.wrap(callback)(unpack(values, 1, length))) + coroutine.wrap(function() + resolve(callback(unpack(values, 1, length))) + end)() end) end end diff --git a/lib/init.spec.lua b/lib/init.spec.lua index aa8d8ed..1efc15c 100644 --- a/lib/init.spec.lua +++ b/lib/init.spec.lua @@ -582,4 +582,18 @@ return function() expect(promises[2]:getStatus()).to.equal(Promise.Status.Resolved) end) end) + + describe("Promise.promisify", function() + it("should wrap functions", function() + local function test(n) + return n + 1 + end + + local promisified = Promise.promisify(test) + local status, result = promisified(1):awaitStatus() + + expect(status).to.equal(Promise.Status.Resolved) + expect(result).to.equal(2) + end) + end) end \ No newline at end of file