【发布时间】:2017-06-30 00:40:38
【问题描述】:
我知道我在同一个句子中使用了“等待”和“异步”这两个词,这是没有意义的。但我想知道是否有人可以建议我解决我的问题。
我有一个在 mongodb 返回的文档数组上运行的 for 循环。现在,根据某些逻辑,我需要删除某些文档。只有在我完成删除文档之后,我才能调用我的下一个方法。如下所示:
mymongodbconnection.find({}).toArray(function(err, documents) {
if (!err && documents.length !== 0) {
documents.forEach(function(document) {
if( someCheckPerformed(document)){
console.log('keeping');
}else{
console.log('removing');
mymongodbconnection.remove({_id:document._id},fun(err,result){});
}
});
notifyAdminAboutChange();
} else {
logger.warn('No existing UA docs to filter');
}
});
现在,如您所见,我需要调用 notifyAdminAboutChange();仅在 for 循环完成对所有文档的迭代并删除需要删除的文档之后。
我的问题:
- 我可以阻止 for 循环执行以等待删除完成吗?
- 如果 1 不可能,我该如何实现这个用例?
【问题讨论】:
-
答案可能是使用promise和promise-do-whilst...但是什么是mongodBCollectionInstance?此外,您可能需要将 writeConcern 与 Mongo 的删除功能一起使用
-
你不能让 Javascript “等待”。相反,您必须更改循环的结构以对异步操作进行排序,或者您必须全部启动它们并跟踪它们何时全部完成,例如
Promise.all()。一些相关答案:How to synchronize a sequence of promises? 和 Asynchronous function inside a javascript for loop
标签: javascript node.js callback