javascript - 运行异步函数 N 次,其中 N 取决于调用返回的内容

标签 javascript node.js asynchronous

我正在处理 mongoDb ( https://jira.mongodb.org/browse/SERVER-1243 ) 的限制,这迫使我运行 update() 调用 N 次,直到我最终得到“0”作为更新记录总数 (太棒了呃?)。

所以,我必须改变这个:

_mongoUglyUpdateWrapper: function( querySelector, updateObject, options, cb ){

  var self = this;
  var total = 0;

  self.collection.update( querySelector, updateObject, options, function( err, partialTotal ){
    if( err ) return cb( err );
    cb( null, partialTotal );
  });
},

进入会重复调用 self.collection.update 直到 partialTotal 最终为 0 的状态——此时它终于可以调用回调了。我通常使用异步,但这里有很大不同。

它需要递归,但我不确定解决这个问题的最佳最简单方法是什么。帮忙?

(题外话:是的,这在性能方面可能是一场灾难,但这就是当您信任新兴技术时所得到的结果;我正在编写的下一层是针对 MySql 的)。 p>

最佳答案

我能想到的最好的方法是命名函数并在该函数内部进行检查:

_mongoUglyUpdateWrapper: function( querySelector, updateObject, options, cb ){

  var self = this;
  var total = 0;

  function checkIfZero( err, partialTotal ) {
    if( err ) return cb( err );
    if( partialTotal !== 0 ) return self.collection.update( querySelector, updateObject, options, checkIfZero );
    cb( null, partialTotal );
  }

  self.collection.update( querySelector, updateObject, options, checkIfZero );
},

关于javascript - 运行异步函数 N 次,其中 N 取决于调用返回的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418244/

相关文章:

java - HttpAsyncPost 设置 header

javascript - 如何在rails 4.2.1中使用jquery-addresspicker

mysql - 显示信息。使用 nodeJS 从 mySQL 数据库到网页

node.js - 如何使用 Cassandra 一致性定义类型?

c# - 如何安排 TPL 数据流中的流控制?

c# - 在异步/等待方面,常规 foreach 和 ForEach LINQ 运算符有什么区别

javascript - 如果 javascript Onclick() 有 Mechanize ,如何点击按钮

javascript - ajax 调用后事件委托(delegate)中断

javascript - append 和 addClass 动画失败

node.js - 安装 yeoman 时出错