【发布时间】:2018-09-09 15:18:12
【问题描述】:
通常,如果我要运行多个 mongoose 查询,我会使用内置的 Promise 将它们链接在一起。在这种情况下,用户选择要搜索的模式。这可能是其中之一或两者兼而有之。以下示例使用发布数据来定义要搜索的模式,如果其中一个为 false,则应继续通过承诺链。现在在查询之前调用最终的承诺。
我的快速控制器中的示例:
app.post('/custom-search', function (req, res) {
var single = false
var multi = false
if(req.body.single){
var single = true
}
if(req.body.multi){
var multi = true
}
var promise = new Promise(function (resolve, reject) {
if(multi){
multiSchema.find({}, function (err, result) {
if(!err){
console.log(result);
resolve()
}
})
}else{
resolve()
}
}).then(function (value) {
if(single){
singleSchema.find({}, function (err, result) {
if(!err){
console.log(result);
resolve()
}
})
}else{
resolve()
}
}).then(function (value) {
console.log("done");
})
})
});
输出:
>done
>[singleResults]
>[multiResults]
done 应该最后打印,这是第一个问题。
【问题讨论】:
-
你为什么不包括解决?在你的承诺定义中?新的承诺(功能(拒绝){
-
@Hadouken Opps 我正在测试一些东西,并认为我已经回到了我的原始代码。我加进去了。
-
我注意到你的代码的几件事。你为什么不回承诺?其次,在您的第一个 .then() 中,您使用的是无法访问的 resolve()。
-
我猜你必须在你的第一个 .then() 回调中定义另一个承诺
标签: javascript asynchronous mongoose promise