警告:在处理程序中创建了一个promise,但未从中返回

时间:2016-04-11 14:18:00

标签: javascript sails.js bluebird

我正在使用蓝鸟和风帆来构建我的应用程序。当我在promise中使用数据库调用时,它会向我显示警告,如

  

警告:在处理程序中创建了一个promise,但未从中返回   它

var P = require('bluebird');
return new P(function (resolve, reject) {
  Product.find({
    or: [
      {barcode: {'contains': q}},
      {name: {'contains': q}},
      {registrationCode: {'contains': q}}
    ]
  })
  .populate('batches')
  .exec(function (err, products) {
    if (err) return reject(err);
    return resolve(products);
  });
}); //- end promise

2 个答案:

答案 0 :(得分:0)

//add return
return Product.find({
...
//wrapping inside bluebird promise wrapper is unnecessary here as well

  

...这允许异步方法返回类似于同步方法的值:异步方法返回一个承诺,即在将来的某个时刻获得一个值。而不是最终值。

请参阅documentationstandard

答案 1 :(得分:0)

将您的代码更改为:

return Product.find({
    or: [
      {barcode: {'contains': q}},
      {name: {'contains': q}},
      {registrationCode: {'contains': q}}
    ]
  })
  .populate('batches')
  .exec().then(function(products) {
      //  your processing here
  });

.exec()已经创建了一个承诺,所以你可以返回该承诺而不将其包含在另一个承诺中。

您看到的警告是因为您没有对在现有承诺处理程序中创建的承诺执行任何操作。在没有看到更多代码的情况下,我们无法确定警告是否是由于您忽略.exec()返回的承诺或者您实际上没有对此函数返回的承诺做任何事情而引起的。

请参阅蓝鸟对该警告的解释here。这使得问题很可能是您忽略了.exec()返回的承诺。