使用mongoskin,我可以进行如下查询,它将返回一个游标:

myCollection.find({}, function(err, resultCursor) {
      resultCursor.each(function(err, result) {

      }
}

但是,我想 for each 文档调用一些异步函数,并且只在调用之后才转到光标上的下一项(类似于async.js模块中的eachSeries struct ).例如:

myCollection.find({}, function(err, resultCursor) {
      resultCursor.each(function(err, result) {

            externalAsyncFunction(result, function(err) {
               //externalAsyncFunction completed - now want to move to next doc
            });

      }
}  

我怎么能这么做?

谢谢

UPDATE:

我不想使用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);
}  

Node.js相关问答推荐

MongoDB如果文档S的字段小于另一个字段,则将该字段加一

设置默认 node 版本

Node js 处理回调和 Promise

将图像添加到多个产品的条带 checkout 会话中

Redis Typescript 删除方法类型转换

无法将示例 Node.js 应用程序部署到 AWS Elastic Beanstalk

使用更新版本仍然找到包@angular/fire但不支持原理图

Typescript 正则表达式:过滤器返回空

Mongoose post中间件触发deleteMany

在 .htaccess 中从非 www 切换到 www 后如何解决无法访问该站点?

将 express js app.use() 移动到另一个文件

如何解决这个关于 TaskRunner 的 Node/Express 代码问题?

在mongodb中只查询整数

如果 express.js (node.js) http 请求在完成之前关闭会发生什么?

Handlebars:访问已被拒绝解析来自的属性,因为它不是其父级的自己的属性

如何在 Node.js 的 console.log() 中创建换行符

分块 WebSocket 传输

如何使用 gulp-uglify 缩小 ES6 函数?

如何在 node 中找到引用站点 URL?

npm install packagename --save-dev 不更新 package.json