【发布时间】: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 方库)中。我已经解决了,谢谢。