使用mongoskin,我可以执行以下查询,该查询将返回游标:
myCollection.find({}, function(err, resultCursor) {
resultCursor.each(function(err, result) {
}
}
但是,我想为每个文档调用一些异步函数,并且仅在回调后再移动到光标的下一个项目(类似于async.js模块中的eachSeries结构)。例如:
myCollection.find({}, function(err, resultCursor) {
resultCursor.each(function(err, result) {
externalAsyncFunction(result, function(err) {
//externalAsyncFunction completed - now want to move to next doc
});
}
}
我该怎么办?
谢谢
更新:
我不愿意使用它,toArray()
因为这是一个大的批处理操作,并且结果可能无法一次性存储在内存中。
如果您不想使用toArray将所有结果加载到内存中,则可以使用游标进行迭代,如下所示。
myCollection.find({}, function(err, resultCursor) {
function processItem(err, item) {
if(item === null) {
return; // All done!
}
externalAsyncFunction(item, function(err) {
resultCursor.nextObject(processItem);
});
}
resultCursor.nextObject(processItem);
}
问题内容: 我正在制作一个经常刷新数据的函数,而我的请求链存在问题。问题是我有一个运行异步请求的for循环,并且for循环将在请求完成之前完成。 如果我要运行此代码,它将显示: 我知道是什么问题。事实上,for循环不会等待请求完成。我不知道这是一种解决方法。有人有什么想法吗? 问题答案: 您需要异步库。 例如, 可以这样写: 异步中有很多方便的实用程序函数,这些函数使回调的使用变得更加容易。
当接收事件时,Akka参与者将一次处理一条消息,直到请求完成后才移动到下一条消息。 例如: 这将调用doThing()并开始处理未来,但不会在处理下一条消息之前等待它完成--它将简单地以尽可能快的速度执行队列中的下一条消息。 实质上,Akka似乎认为“返回未来”是“完成处理”,并进入下一个消息。
问题内容: 如何遍历例如从查询创建的隐式游标? 这是示例代码: 问题答案: 这是允许动态SQL的方法。您可以根据需要在代码中构建查询字符串(适用于有关SQL注入的常规警告)。
问题内容: 说我有一个数组。如何一次迭代两个? 问题答案: 您可以使用称为stride(to :, by :)的进度循环,每n个元素对元素进行一次迭代: Xcode 8.3.2•Swift 3.1
我使用的是Firebase Cloud Firestore,然而,我认为这可能更像是JavaScript异步与同步promise返回的问题。 我正在执行一个查询以从一个集合中获取ID,然后循环该查询的结果以根据该ID从另一个集合中查找单个记录。 我怎么能等到forEach完成后才从外部promise和外部函数本身返回呢?