【问题标题】:Making mongoose queries work with bluebird's reflect使猫鼬查询与蓝鸟的反射一起工作
【发布时间】:2017-06-09 09:21:20
【问题描述】:

我正在尝试将 Bluebird 与猫鼬一起使用。这是我的实现。

const Bluebird = require('bluebird');
const mongoose = require('mongoose');
const Entity = require('./entity');
mongoose.Promise = Bluebird;

现在我尝试做这样的事情。

let promises = [];
promises.push(Entity.findOne({ country: 'HONGKONG' }));
promises.push(Entity.findOne({ country: 'INDIA' }));
promises.push(Entity.findOne({ country: 'THAILAND' }));

我知道上面的查询没有意义。这只是多重承诺的一个例子。

现在我尝试实现 Bluebirds Reflect

return Bluebird.all(promises.map(function (promise) {
  return promise.reflect();
}))
  .then(response => {
    console.log(response.filter(r => r.isFulfilled() ));
    console.log(response.filter(r => !r.isFulfilled() ));
  }).catch(err=>{
    console.log(err);
  })

我收到错误promise.reflect is not a function

但是,当我这样做时,它工作正常。

promises.push(new  Bluebird( (resolve, reject) => resolve(Entity.findOne({ country: 'HONGKONG' } )) ));
promises.push(new  Bluebird( (resolve, reject) => resolve(Entity.findOne({ country: 'INDIA' } )) ));
promises.push(new  Bluebird( (resolve, reject) =>  resolve(Entity.findOne({ country: 'THAILAND' } )) )); 

我的问题是,为什么猫鼬没有正常执行蓝鸟的承诺。我是否需要使用 Bluebird 显式解析每个查询?

【问题讨论】:

    标签: node.js mongodb mongoose promise bluebird


    【解决方案1】:

    我认为它失败了,因为.findOne() 没有返回一个 Promise,而是一个查询对象。您必须在末尾添加.exec()

    试试:

    let promises = [];
    promises.push(Entity.findOne({ country: 'HONGKONG' }).exec());
    promises.push(Entity.findOne({ country: 'INDIA' }).exec());
    promises.push(Entity.findOne({ country: 'THAILAND' }).exec());
    

    Here 你有更多关于 Mongoose 中的 Promise 的信息。还解释了为什么需要使用.exec() 函数。

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 2015-03-05
      • 1970-01-01
      • 2015-10-27
      • 2016-11-21
      • 2015-11-19
      • 2016-08-14
      • 2015-04-02
      • 2016-06-04
      相关资源
      最近更新 更多