Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步回调循环_Javascript_Loops_Asynchronous_Callback - Fatal编程技术网

Javascript 异步回调循环

Javascript 异步回调循环,javascript,loops,asynchronous,callback,Javascript,Loops,Asynchronous,Callback,我想做一个如下的循环 asyncFunction(function(returnedVariable){ if(returnedVariable < 10 ) // call asyncFunction() again else // break/exit }); asyncFunction(函数(returnedVariable){ if(返回的变量

我想做一个如下的循环

asyncFunction(function(returnedVariable){
    if(returnedVariable < 10 )
        // call asyncFunction() again
    else
        // break/exit
});
asyncFunction(函数(returnedVariable){
if(返回的变量<10)
//再次调用asyncFunction()
其他的
//中断/退出
});
这可能吗

我不能从里面说,因为那样的话

asyncFunction(function(returnedVariable){
    if(returnedVariable < 10 )
        asyncFunction(function(returnedVariable){
            // ???
        });
    else
        // break/exit
});
asyncFunction(函数(returnedVariable){
if(返回的变量<10)
asyncFunction(函数(returnedVariable){
// ???
});
其他的
//中断/退出
});

编辑-底部的原始答案。在重读之后,我认为您可以针对您的案例这样做(尽管我从未尝试过像这样引用内部函数):

function-asyncFunction(callback){/*…先做东西,然后callback()*/};
函数myCallback(returnedVariable){
if(返回的变量<10){
异步函数(myCallback);
}否则{
//中断/退出
}
}
异步函数(myCallback);

我相信有一种方法可以在没有库的情况下实现,但为了简单起见,我总是使用在节点和浏览器中都可以使用的方法:

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);
};
var async=require('async');
//对于浏览器,在该脚本上方:
// 
函数包装器(回调){
var lastReturn=0;
函数测试(){
返回上次返回<10
};
函数迭代(下一步){
lastReturn=doSomethingWithPrev(lastReturn);
next();
};
功能完成(err){
if(err){返回回调(err)};
回调(null,lastReturn);
};
异步(测试、迭代、完成);
};

听起来像是递归的最基本情况。不完全是递归,因为堆栈上应该只有一个
aSyncFunction
的实例,但原理是一样的。@Tarmo&Jeremy我无法了解它的基本原理。我编辑它是为了准确地解释这个问题。。。
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);
};