q.all() 同时解决多个猫鼬查询
q.all() to resolve multiple mongoose queries concurrently
我正在尝试使用 q promise 库来同时 运行 两个猫鼬查询。我希望独立进行两个查询,然后在两个查询完成后使用结果执行一个函数。
我试图以这种方式设置 q.all(),但结果在 then()
中始终处于挂起状态。我需要已解决的查询结果而不是未决的承诺。
var q = require('q');
var promises = {
aircraft: q(aircraftModel.findOne({_id: tailNumber})
.exec()),
faaAircraft: q(faaAircraftModel.findOne({_id: tailNumber.substring(1)})
.exec())
};
q.all(promises).then(function(result){
console.log(result)
}, function(err){
console.log(err)
})
结果是下面未决承诺的对象,而不是值。对于这些查询,我如何获取从 MongoDB 返回的值?
{ aircraft: { state: 'pending' },
faaAircraft: { state: 'pending' } }
function(err){}
永远不会执行。
AFAIK,q.all()
只处理承诺数组,而不处理承诺对象(就像你传递的一样)。此外,由于 Mongoose 的 .exec()
returns 已经是一个 promise,您不必使用 q(...)
包装它们(尽管这样做也没什么坏处)。
试试这个:
var promises = [
aircraftModel.findOne({_id: tailNumber}).exec(),
faaAircraftModel.findOne({_id: tailNumber.substring(1)}).exec()
];
q.all(promises).then(...);
在较新版本的 Node 上使用 q
的替代方法是使用本机 Promise.all
method with mongoose's mpromise:
var promises = [
aircraftModel.findOne({_id: tailNumber}).exec(),
faaAircraftModel.findOne({_id: tailNumber.substring(1)}).exec()
];
Promise.all(promises).then(function(results) {
console.log(results);
}).catch(function(err){
console.log(err);
});
我正在尝试使用 q promise 库来同时 运行 两个猫鼬查询。我希望独立进行两个查询,然后在两个查询完成后使用结果执行一个函数。
我试图以这种方式设置 q.all(),但结果在 then()
中始终处于挂起状态。我需要已解决的查询结果而不是未决的承诺。
var q = require('q');
var promises = {
aircraft: q(aircraftModel.findOne({_id: tailNumber})
.exec()),
faaAircraft: q(faaAircraftModel.findOne({_id: tailNumber.substring(1)})
.exec())
};
q.all(promises).then(function(result){
console.log(result)
}, function(err){
console.log(err)
})
结果是下面未决承诺的对象,而不是值。对于这些查询,我如何获取从 MongoDB 返回的值?
{ aircraft: { state: 'pending' },
faaAircraft: { state: 'pending' } }
function(err){}
永远不会执行。
AFAIK,q.all()
只处理承诺数组,而不处理承诺对象(就像你传递的一样)。此外,由于 Mongoose 的 .exec()
returns 已经是一个 promise,您不必使用 q(...)
包装它们(尽管这样做也没什么坏处)。
试试这个:
var promises = [
aircraftModel.findOne({_id: tailNumber}).exec(),
faaAircraftModel.findOne({_id: tailNumber.substring(1)}).exec()
];
q.all(promises).then(...);
在较新版本的 Node 上使用 q
的替代方法是使用本机 Promise.all
method with mongoose's mpromise:
var promises = [
aircraftModel.findOne({_id: tailNumber}).exec(),
faaAircraftModel.findOne({_id: tailNumber.substring(1)}).exec()
];
Promise.all(promises).then(function(results) {
console.log(results);
}).catch(function(err){
console.log(err);
});