How to debug "Error: Promise rejected with no or falsy reason" in Mocha tests?
How to debug "Error: Promise rejected with no or falsy reason" in Mocha tests?
我在 Mocha 中的测试失败并出现此错误。
我已将 catch
语句放在每个 promise 链的末尾,这些语句会抛出任何已传递但从未被调用的错误。
然而测试一直失败并出现以下错误:
Error: Promise rejected with no or falsy reason
at tryCatcher (node_modules/bluebird/js/main/util.js:26:23)
at Promise._settlePromiseFromHandler (node_modules/bluebird/js/main/promise.js:507:31)
at Promise._settlePromiseAt (node_modules/bluebird/js/main/promise.js:581:18)
at Promise._settlePromises (node_modules/bluebird/js/main/promise.js:697:14)
at Async._drainQueue (node_modules/bluebird/js/main/async.js:123:16)
at Async._drainQueues (node_modules/bluebird/js/main/async.js:133:10)
at Immediate.Async.drainQueues [as _onImmediate] (node_modules/bluebird/js/main/async.js:15:14)
我如何找出问题的确切原因,哪个承诺被拒绝并获得更有意义的跟踪?
我找到了触发错误的原因。我不得不承诺一个流,所以我把它包装在 return new Promise...
但是,promises 与常规回调具有不同的签名。错误首先出现在回调中:function(err, res) { ... }
。在承诺中,它是相反的:new Promise(function(resolve, reject) { ... }
.
我有 new Promise(function(reject, resolve) { ... }
。因此,我在流结束时调用 resolve
,在流出错时调用 reject
。但是,我的 resolve
实际上是 reject
函数,而我的 reject
实际上是 resolve
函数,因为我将它们取反了。
我在 Mocha 中的测试失败并出现此错误。
我已将 catch
语句放在每个 promise 链的末尾,这些语句会抛出任何已传递但从未被调用的错误。
然而测试一直失败并出现以下错误:
Error: Promise rejected with no or falsy reason
at tryCatcher (node_modules/bluebird/js/main/util.js:26:23)
at Promise._settlePromiseFromHandler (node_modules/bluebird/js/main/promise.js:507:31)
at Promise._settlePromiseAt (node_modules/bluebird/js/main/promise.js:581:18)
at Promise._settlePromises (node_modules/bluebird/js/main/promise.js:697:14)
at Async._drainQueue (node_modules/bluebird/js/main/async.js:123:16)
at Async._drainQueues (node_modules/bluebird/js/main/async.js:133:10)
at Immediate.Async.drainQueues [as _onImmediate] (node_modules/bluebird/js/main/async.js:15:14)
我如何找出问题的确切原因,哪个承诺被拒绝并获得更有意义的跟踪?
我找到了触发错误的原因。我不得不承诺一个流,所以我把它包装在 return new Promise...
但是,promises 与常规回调具有不同的签名。错误首先出现在回调中:function(err, res) { ... }
。在承诺中,它是相反的:new Promise(function(resolve, reject) { ... }
.
我有 new Promise(function(reject, resolve) { ... }
。因此,我在流结束时调用 resolve
,在流出错时调用 reject
。但是,我的 resolve
实际上是 reject
函数,而我的 reject
实际上是 resolve
函数,因为我将它们取反了。