使猫鼬查询与蓝鸟的反映一起工作
Making mongoose queries work with bluebird's reflect
我正在尝试将 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' } )) ));
我的问题是,为什么 mongoose 没有正常执行 bluebird 的 promise 实现。我是否需要使用 Bluebird 显式解析每个查询?
我认为它失败了,因为最后 .findOne() does not return a Promise, but a Query Object. You have to add .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 中的 Promises 的信息。为什么需要使用 .exec()
函数也有解释。
我正在尝试将 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' } )) ));
我的问题是,为什么 mongoose 没有正常执行 bluebird 的 promise 实现。我是否需要使用 Bluebird 显式解析每个查询?
我认为它失败了,因为最后 .findOne() does not return a Promise, but a Query Object. You have to add .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 中的 Promises 的信息。为什么需要使用 .exec()
函数也有解释。