发布或循环时,如何用JavaScript编写异步方法?

发布或循环时,如何用JavaScript编写异步方法?,javascript,Javascript,我在JavaScript代码中做了一个循环,在这个循环中我使用了一个带有回调方法的XMLHttpRequest,但我遇到了一个问题 当我的循环结束时,回调将执行。这不好,我需要在调用函数之后执行回调,而不是在循环之后。我该怎么做 有人在博客上写道,我可以使用异步方法。在这种情况下,如何使用异步方法 for (var i = 0; i < stuff.length; i++) { var exist = IsstuffExist(stuff[i

我在JavaScript代码中做了一个循环,在这个循环中我使用了一个带有回调方法的XMLHttpRequest,但我遇到了一个问题

当我的循环结束时,回调将执行。这不好,我需要在调用函数之后执行回调,而不是在循环之后。我该怎么做

有人在博客上写道,我可以使用异步方法。在这种情况下,如何使用异步方法

for (var i = 0; i < stuff.length; i++) {
                        var exist = IsstuffExist(stuff[i]);
                        alert(exist);
                    }

你基本上必须改变你的想法。您需要改变编写代码的风格,如下所示:

for (var i = 0; i < stuff.length; i++) {
    var exist = IsstuffExist(stuff[i]);
    alert(exist);
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i], function(exist) {
        alert(exist);
    });
}
function IsstuffExist (stuff, callback) {
    // Do things and once you get the `exist` variable you can
    // pass it to the callback function. Any code that needs
    // to continue processing things can then resume from
    // within the callback function:
    callback(exist);
}
for (var i = 0; i < stuff.length; i++) {
    if(IsstuffExist(stuff[i])) {
        doSomethingAndUpdateTheHTML();
    }
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i],function(exist){
        if (exist) {
            doSomethingAndUpdateTheHTML();
        }
    });
}
这种技术可以嵌套,将回调函数传递给其他回调函数。一个具体的例子是ajax调用:

// I'm using my own ajax library in this example but it's the same
// if you use other libraries:

function IsstuffExist (stuff, mycallback) {
    // Make ajax call to find out if stuff exist:
    ajax('some/url.com', {
        callback : function (r) {
            var status = r.responseText;
            mycallback(status);
        }
    });
}
注意:为了避免混淆,我将函数的回调重命名为
mycallback
。但在真正的代码中,我会简单地将其命名为
callback

因此,现在不要像这样编写代码:

for (var i = 0; i < stuff.length; i++) {
    var exist = IsstuffExist(stuff[i]);
    alert(exist);
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i], function(exist) {
        alert(exist);
    });
}
function IsstuffExist (stuff, callback) {
    // Do things and once you get the `exist` variable you can
    // pass it to the callback function. Any code that needs
    // to continue processing things can then resume from
    // within the callback function:
    callback(exist);
}
for (var i = 0; i < stuff.length; i++) {
    if(IsstuffExist(stuff[i])) {
        doSomethingAndUpdateTheHTML();
    }
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i],function(exist){
        if (exist) {
            doSomethingAndUpdateTheHTML();
        }
    });
}
for(var i=0;i
你是这样写的:

for (var i = 0; i < stuff.length; i++) {
    var exist = IsstuffExist(stuff[i]);
    alert(exist);
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i], function(exist) {
        alert(exist);
    });
}
function IsstuffExist (stuff, callback) {
    // Do things and once you get the `exist` variable you can
    // pass it to the callback function. Any code that needs
    // to continue processing things can then resume from
    // within the callback function:
    callback(exist);
}
for (var i = 0; i < stuff.length; i++) {
    if(IsstuffExist(stuff[i])) {
        doSomethingAndUpdateTheHTML();
    }
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i],function(exist){
        if (exist) {
            doSomethingAndUpdateTheHTML();
        }
    });
}
for(var i=0;i
你基本上必须改变你的想法。您需要改变编写代码的风格,如下所示:

for (var i = 0; i < stuff.length; i++) {
    var exist = IsstuffExist(stuff[i]);
    alert(exist);
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i], function(exist) {
        alert(exist);
    });
}
function IsstuffExist (stuff, callback) {
    // Do things and once you get the `exist` variable you can
    // pass it to the callback function. Any code that needs
    // to continue processing things can then resume from
    // within the callback function:
    callback(exist);
}
for (var i = 0; i < stuff.length; i++) {
    if(IsstuffExist(stuff[i])) {
        doSomethingAndUpdateTheHTML();
    }
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i],function(exist){
        if (exist) {
            doSomethingAndUpdateTheHTML();
        }
    });
}
这种技术可以嵌套,将回调函数传递给其他回调函数。一个具体的例子是ajax调用:

// I'm using my own ajax library in this example but it's the same
// if you use other libraries:

function IsstuffExist (stuff, mycallback) {
    // Make ajax call to find out if stuff exist:
    ajax('some/url.com', {
        callback : function (r) {
            var status = r.responseText;
            mycallback(status);
        }
    });
}
注意:为了避免混淆,我将函数的回调重命名为
mycallback
。但在真正的代码中,我会简单地将其命名为
callback

因此,现在不要像这样编写代码:

for (var i = 0; i < stuff.length; i++) {
    var exist = IsstuffExist(stuff[i]);
    alert(exist);
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i], function(exist) {
        alert(exist);
    });
}
function IsstuffExist (stuff, callback) {
    // Do things and once you get the `exist` variable you can
    // pass it to the callback function. Any code that needs
    // to continue processing things can then resume from
    // within the callback function:
    callback(exist);
}
for (var i = 0; i < stuff.length; i++) {
    if(IsstuffExist(stuff[i])) {
        doSomethingAndUpdateTheHTML();
    }
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i],function(exist){
        if (exist) {
            doSomethingAndUpdateTheHTML();
        }
    });
}
for(var i=0;i
你是这样写的:

for (var i = 0; i < stuff.length; i++) {
    var exist = IsstuffExist(stuff[i]);
    alert(exist);
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i], function(exist) {
        alert(exist);
    });
}
function IsstuffExist (stuff, callback) {
    // Do things and once you get the `exist` variable you can
    // pass it to the callback function. Any code that needs
    // to continue processing things can then resume from
    // within the callback function:
    callback(exist);
}
for (var i = 0; i < stuff.length; i++) {
    if(IsstuffExist(stuff[i])) {
        doSomethingAndUpdateTheHTML();
    }
}
for (var i = 0; i < stuff.length; i++) {
    IsstuffExist(stuff[i],function(exist){
        if (exist) {
            doSomethingAndUpdateTheHTML();
        }
    });
}
for(var i=0;i
感谢andy编辑我的问题。语言障碍使你很难理解你的问题。你应该试着澄清你的意思-张贴你遇到问题的代码,还有可能是你提到的博客文章的链接。那么你想在进行下一次迭代之前等待回调函数完成吗?是的@gumbo让我们看看我的代码也许如果你给出一个具体的例子,说明你正在尝试做什么,会更容易理解,比如“我正在尝试循环浏览图像列表,并通过Ajax更新它们的标记“谢谢安迪编辑我的问题。语言障碍使你很难理解你的问题。你应该试着澄清你的意思-张贴你遇到问题的代码,还有可能是你提到的博客文章的链接。那么你想在进行下一次迭代之前等待回调函数完成吗?是的@gumbo让我们看看我的代码也许如果你给出一个具体的例子,说明你正在尝试做什么,会更容易理解,比如“我正在尝试循环浏览图像列表,并通过Ajax更新它们的标记”