diff --git a/CHANGELOG.md b/CHANGELOG.md index 66202ea..0fc1aee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 2.5.1 + +- Fix issue with rejecting with non-string not propagating correctly. + # 2.5.0 - Add Promise.tap diff --git a/lib/init.lua b/lib/init.lua index 2791f8a..94afab4 100644 --- a/lib/init.lua +++ b/lib/init.lua @@ -61,7 +61,7 @@ local function createAdvancer(traceback, callback, resolve, reject) if ok then resolve(unpack(result, 1, resultLength)) else - reject(result[1], traceback) + reject(result[1] .. "\n" .. traceback) end end end @@ -193,15 +193,10 @@ function Promise._newWithSelf(executor, ...) end function Promise._new(traceback, executor, ...) - return Promise._newWithSelf(function(self, resolve, reject) + return Promise._newWithSelf(function(self, ...) self._source = traceback - executor(resolve, function(err, traceback) - err = err or "error" - traceback = traceback or "" - self._error = err - reject(err .. "\n" .. traceback) - end) + executor(...) end, ...) end diff --git a/lib/init.spec.lua b/lib/init.spec.lua index 226de1f..d639459 100644 --- a/lib/init.spec.lua +++ b/lib/init.spec.lua @@ -84,7 +84,6 @@ return function() -- Loosely check for the pieces of the stack trace we expect expect(promise._values[1]:find("init.spec")).to.be.ok() expect(promise._values[1]:find("new")).to.be.ok() - expect(promise._values[1]:find("Stack Begin")).to.be.ok() end) end) @@ -286,6 +285,21 @@ return function() expect(chained:getStatus()).to.equal(Promise.Status.Resolved) expect(#chained._values).to.equal(0) end) + + it("should propagate errors through multiple levels", function() + local x, y, z + Promise.new(function(resolve, reject) + reject(1, 2, 3) + end) + :andThen(function() end) + :catch(function(a, b, c) + x, y, z = a, b, c + end) + + expect(x).to.equal(1) + expect(y).to.equal(2) + expect(z).to.equal(3) + end) end) describe("Promise:cancel", function()