【问题标题】:How to debug "Error: Promise rejected with no or falsy reason" in Mocha tests?如何在 Mocha 测试中调试“错误:无理由或错误理由拒绝承诺”?
【发布时间】:2015-12-30 05:42:12
【问题描述】:

我在 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)

我如何找出问题到底是什么,哪个承诺被拒绝并获得更有意义的跟踪?

【问题讨论】:

  • 包含您的测试代码会有所帮助。

标签: javascript node.js promise mocha.js chai


【解决方案1】:

我找到了触发错误的原因。我不得不承诺一个流,所以我把它包装在 return new Promise...

但是,promise 与常规回调有不同的签名。回调中首先出现错误:function(err, res) { ... }。在 Promise 中,情况正好相反:new Promise(function(resolve, reject) { ... }

我有new Promise(function(reject, resolve) { ... }。因此,我在流完成时调用resolve,在流出现错误时调用reject。但是,我的 resolve 实际上是 reject 函数,而我的 reject 实际上是 resolve 函数,因为我将它们反转了。

【讨论】:

  • 谢谢,这是我的问题。在 Promise 签名中首先解析,然后拒绝
  • 也许你可以在这里使用 bluebirds PromisifyPromisifyAll 函数,它们会将回调转换为 Promise - 请参阅:bluebirdjs.com/docs/api/promise.promisify.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 2015-10-28
  • 2017-07-16
  • 2019-04-09
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
相关资源
最近更新 更多