异步回调循环

Async callback loop

本文关键字:循环 回调 异步      更新时间:2023-09-26

我想创建如下循环

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

这可能吗?

我不能从内部调用它,因为

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

在底部编辑原始答案。重读后,我认为你可以为你的情况这样做(虽然我从来没有尝试过引用一个函数内部像这样):

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);
};