在 Mongoose 查询中使用 javascript Promise
Posted
技术标签:
【中文标题】在 Mongoose 查询中使用 javascript Promise【英文标题】:Using javascript promises with Mongoose queries 【发布时间】: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() 回调中定义另一个承诺 【参考方案1】:正如我们所讨论的,几乎没有什么需要清理的。首先,通过实际使用并返回 Promise 以使其正常工作,其次,在您的第一个 .then()
中创建一个 mini-promise 来解决和拒绝您的单个条件语句。第三,处理/捕捉承诺。
我写了你的代码的伪版本来说明我的观点,希望它可能有用。
app.get('/custom-search', function (req, res)
// Manipulating values to test responses
var single = false;
var multi = true;
var promise = new Promise(function (resolve, reject)
if (multi)
setTimeout(function ()
resolve('MULTI RESOLVED!');
, 3000);
else
reject('MULTI REJECTED!');
)
.then(function (value)
new Promise(function (resolve, reject)
if (single)
setTimeout(function ()
resolve('SINGLE RESOLVED!');
, 3000);
else
reject('SINGLE REJECTED!');
)
.catch(function (error)
console.log('SINGLE ERROR!', error);
)
.then(function (value)
console.log('SINGLE DONE', value);
);
)
.catch(function (error)
console.log('MULTI ERROR!', error);
);
return promise;
);
【讨论】:
以上是关于在 Mongoose 查询中使用 javascript Promise的主要内容,如果未能解决你的问题,请参考以下文章
嵌套的 Mongoose 查询数据未显示在 GraphQL 查询中
如何在 mongoose/mongodb 查询子文档中使用 mapreduce?
如何在 mongoose/mongodb 查询子文档中使用 mapreduce?