【问题标题】:Warning: a promise was created in a handler - bluebird警告:在处理程序中创建了一个承诺 - 蓝鸟
【发布时间】:2017-05-04 16:31:13
【问题描述】:

我收到以下警告错误,请指导我修复它。

警告:在匿名处理程序中创建了一个承诺>(/opt/testproj/node_modules/pipeworks/pipeworks.js:72:17但未从中返回,请参阅http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-created-in-a-handler-but-was-not-returned-from-it 在新的 Promise (/opt/testproj/node_modules/bluebird/js/release/promise.js:77:14)

示例代码

const bluebird = require('bluebird');
const options = {
                  promiseLib: bluebird
                };
const pgpromise = require('pg-promise')(options);
const connectionString = `postgres://${user}:${password}@${host}:${port}/${database}`; 
const db = pgpromise(connectionString);


db.func('student__find_by_id', [id])                                       
.then((data) => {                                                                                                                   
  return res.json(data);
}).catch((err) => {
   log.error(err);                                                                                                              
});

【问题讨论】:

  • 你的代码看起来太简单了。要么你在某处遗漏了 return 语句,要么 posgres 库没有链接所有嵌套的 Promise。如果错误堆栈是诚实的,那么它是您的一个库正在使用的第 3 方库,它有错误。不是你。在这种情况下,请使用不同的 Promise 库,或者看看是否可以关闭警告。
  • 感谢@Norguard 的即时回复。是的,这是给出警告的简单代码,我不知道这段代码有什么问题,我在需要的地方保留了 return 语句。如果我不使用 bluebird,我不会收到此警告错误 默认情况下,pg-promise 使用 ES6 Promise(npmjs.com/package/pg-promise#promiselib)。
  • 此处显示的代码不会引发该错误。您的代码中的其他地方一定有问题。 pg-promise 中的测试覆盖非常全面,使用Bluebird 作为 Promise 库,这样的标准情况被覆盖了 100 倍以上。
  • @Norguard,是的,正如您所说,错误出现在 swagger 中间件(第 3 方库)中。我已经解决了,谢谢。

标签: node.js promise


【解决方案1】:

根据我之前的 cmets,此处显示的代码不会抛出您描述的错误。 pg-promise 测试全面涵盖了此类情况。

您应该使用Bluebird's Long Stack Tracing 功能来正确识别导致此错误的代码:

var Promise = require('bluebird');

Promise.config({
    longStackTraces: true
});

【讨论】:

  • 谢谢 Vitaly,我添加了 longStackTraces: true,但没有运气。它显示相同的错误消息,仅此而已。
  • @thavaamm 它没有显示问题发生的确切行吗?绝对应该。
  • 如果您认为您的代码是正确的,或者只是想禁用这些警告,您可以执行longStackTraces: false,它将隐藏这些类型的错误。一般来说,这不是一个很好的解决方案,但作为一个临时的,直到你最终发现发生了什么......;)
  • 感谢您的意见。我已经解决了这个问题,问题出在 swagger 中间件(第三方库)中。
猜你喜欢
  • 2016-08-23
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多