【问题标题】:Mongoose cursor with async operations带有异步操作的猫鼬游标
【发布时间】:2018-05-21 05:18:19
【问题描述】:

我是 mongo 的新手,现在淹没在大量文档中。我只想使用 mongoose 游标与游标内的数据操作异步工作。它应该等待播放下一次迭代,直到操作完成。 我读到我们可以通过

  • QueryCursor#eachAsync(fn, [options], [options.parallel], [callback])

  • 如果 fn 返回一个承诺,将等待承诺解决

由于我是 mongo 的新手,我不知道如何创建一个承诺并在以后解决它。

var cursor = Users.find({ "is_verified" : false }).cursor();
cursor.eachAsync(function (doc) { 
    //create promise here
    async.series({
       one: function(callback){
          callback(null,1);
       },
       two: function(callback){
          callback(null,2);
       },
       three: function(callback){
          callback(null,3);
       },
       four: function(callback){
          //resolve promise here
          if() callback(null,4)
       },
   },function(err,result){})


}).then(()=>console.log('FINISHED'));

【问题讨论】:

  • 你能再清楚一点吗?我想帮忙。
  • 我想要做的就是从我的数据库中获取数据一个接一个地对它们执行操作(这将在 html 模板中提供数据并向用户发送邮件),这将是一个一系列异步操作并不断重复所有数据。
  • 所以流程类似于: find(1) -> waitForFindFinish(1) -> storeInVariable(1) -> find(2) -> waitForFindFinish(2) -> storeInVariable(2) ->... -> find(n) -> waitForFindFinish(n) -> storeInVariable(n) ???
  • find(1) -> waitForFindFinish(1) -> feedDetailInTemplate(1) -> sendMailofTemplate(1) -> find(2) -> waitForFindFinish(2) -> feedDetailInTemplate(2) - > sendMailofTemplate(2)......
  • 所以只有find的参数在变?

标签: node.js mongodb asynchronous mongoose mongodb-query


【解决方案1】:

我会在这样的数组中调用你的函数: [这是半伪代码]

for(parameter in parameters) {
  users.find({"parameter":parameter}, function( err, data) {
    if (err) return handleError(err);
    functionToFeedTemplate(data);
    functionToSendMail(data);
  }
}

【讨论】:

  • 感谢您的回答,但我采取了一种方式。通过返回一个空承诺并在async.series([...])的call_back中解决它
猜你喜欢
  • 2019-02-14
  • 2018-08-09
  • 2018-03-09
  • 2016-06-22
  • 2013-10-24
  • 2019-01-24
  • 1970-01-01
  • 2019-06-20
  • 2018-08-30
相关资源
最近更新 更多