异步回调循环

时间:2014-03-15 16:29:58

标签: javascript loops asynchronous callback

我想按如下方式制作一个循环

asyncFunction(function(returnedVariable){
    if(returnedVariable < 10 )
        // call asyncFunction() again
    else
        // break/exit
});

这可能吗?

我无法从内部调用它,因为那时

asyncFunction(function(returnedVariable){
    if(returnedVariable < 10 )
        asyncFunction(function(returnedVariable){
            // ???
        });
    else
        // break/exit
});

1 个答案:

答案 0 :(得分:1)

编辑 - 底部的原始答案。重读之后,我认为你可以为你的情况做这件事(虽然我从来没有尝试过这样的内部功能):

function asyncFunction(callback){ /* ... do stuff then callback() */ };

function myCallback(returnedVariable){
  if(returnedVariable < 10 ){
    asyncFunction(myCallback);
  } else {
    // break/exit
  }
}

asyncFunction(myCallback);

我确定在没有库的情况下可以做到这一点但是为了简单起见,我总是只使用caolan/async在节点和浏览器中都有效:

var async = require('async');
// for browser, above this script:
// <script src="/path/whatever/async.js" type="text/javascript"></script>

function wrapper(callback){
  var lastReturn = 0;

  function test(){ 
    return lastReturn < 10 
  };

  function iterate(next){
    lastReturn = doSomethingWithPrev(lastReturn);
    next();
  };

  function complete(err){
    if(err){ return callback(err) };
    callback(null, lastReturn);
  };

  async.whilst(test, iterate, complete);
};