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