Использование mongoskin, я могу сделать запрос, как это, который будет возвращать курсор:Перебор MongoDB курсора последовательно (ожидание обратного вызова, прежде чем перейти к следующему документу)
myCollection.find({}, function(err, resultCursor) {
resultCursor.each(function(err, result) {
}
}
Однако, я хотел бы вызывать некоторые асинхронные функции для каждого документа и только перейти к следующему элементу курсора после того, как он перезвонил (аналогично структуре eachSeries в модуле async.js). Например:
myCollection.find({}, function(err, resultCursor) {
resultCursor.each(function(err, result) {
externalAsyncFunction(result, function(err) {
//externalAsyncFunction completed - now want to move to next doc
});
}
}
Как я могу это сделать?
Благодаря
UPDATE:
Я не wan't использовать toArray()
, поскольку это большая партия операция, и результаты могут не поместиться в памяти на одном дыхании.
Если вы блокируете и ожидаете завершения функции async перед перемещением, то в чем смысл асинхронного вызова? –
@RotemHermon У меня нет выбора! Это не моя функция, и это асинхронно. (Переименует myAsyncFunction в externalAsyncFunction ...) – UpTheCreek
Почему вы не используете 'toArray()', а затем рекурсивную функцию для итерации результата? –