在Javascript的for循环中等待函数的执行?
我有一个类似于以下内容的脚本:在Javascript的for循环中等待函数的执行?,javascript,jquery,ajax,for-loop,asynchronous,Javascript,Jquery,Ajax,For Loop,Asynchronous,我有一个类似于以下内容的脚本: function1() { for(i < 5) { function2(i); } } function2(i) { $jqueryHere; } (function () { var count = 0; function f1() { if (count < 5) f2(); } function f2() { $ajax.onComplete = fu
function1() {
for(i < 5) {
function2(i);
}
}
function2(i) {
$jqueryHere;
}
(function () {
var count = 0;
function f1() {
if (count < 5)
f2();
}
function f2() {
$ajax.onComplete = function () { count++; f1(); }
$doAjax();
}
})()
编辑:我建议改为使用承诺,并调用
then()
五次,但是如果您希望能够调整调用异步函数的次数,则需要跟踪异步调用之间的迭代计数。您可以通过存储在外部作用域中进行的调用的数量来实现这一点,也可以像我下面所做的那样,将其作为参数传递
function f1(i) {
if (!i || i < 5) // nullguard the parameter so function can be called as 'f1()'
f2(i || 0);
}
function f2(i) {
$ajax.onComplete = function () { f1(i+1); }
$doAjax();
}
函数f1(i){
如果(!i | | i<5)//nullguard,则可以将参数so函数称为'f1()'
f2(i | | 0);
}
功能f2(i){
$ajax.onComplete=function(){f1(i+1);}
$doAjax();
}
在外部作用域中存储计数器的示例如下:
function1() {
for(i < 5) {
function2(i);
}
}
function2(i) {
$jqueryHere;
}
(function () {
var count = 0;
function f1() {
if (count < 5)
f2();
}
function f2() {
$ajax.onComplete = function () { count++; f1(); }
$doAjax();
}
})()
(函数(){
var计数=0;
函数f1(){
如果(计数小于5)
f2();
}
函数f2(){
$ajax.onComplete=函数(){count++;f1();}
$doAjax();
}
})()
提供ajax代码是否希望它等待ajax调用完成?如果是这样,您可以在ajax调用中抛出async:false
,以强制它是同步的。理想情况下,您可以让它保持异步,并且您的应用程序可以正确处理它,但如果没有更多的代码,则很难判断您正在执行的操作。我刚刚为第二个函数添加了代码。请添加一些解释,说明此代码为何有助于OP。这将有助于提供一个未来观众可以学习的答案。有关更多信息,请参阅。