一天中的好时光! 我最近开始学习 JavaScript,但在处理异步请求时遇到了一些困难。 我必须在尽可能短的时间内向服务器发出大量请求。
for (i=0;i<10;i++;) {
method.call(get, data: "id", function(result) {
id = id.concat(data.id);
})
}
我认为我的方式是不正确的,因为请求不能被及时处理,并且有得不到部分信息的风险。
如果您理解我的意思,是否有在这种情况下使用的通用方法,是否有任何指向文章的链接,这些文章解释了处理异步和新出现问题的所有细节? 很抱歉问了这么长的问题。
最佳答案
如果时机不重要,您需要使用一个称为 promise 的概念。 http://www.promisejs.org/intro/和 http://blogs.msdn.com/b/ie/archive/2011/09/11/asynchronous-programming-in-javascript-with-promises.aspx是很好的介绍。在伪代码中:
when(somethinghappens).then(dosomething)
您可以设置其中的 10 个来执行,它们不会互相阻塞,前提是浏览器允许那么多连接。
如果时机很重要(B 在 A 完成之前不会发生)那么您需要使用回调。
getstuff(thingA, function(){
// do stuff with thingA and then:
getStuff(thingB, function(){
// do stuff with thingB and then:
getStfuff(thingC, function
// and so on
}
}
}
当然,回调不需要是匿名函数调用的嵌套 hell 。您可以为每个命名并在函数内执行下一个回调。
getstuff(thingA, doCallBackB);
function doCallBackB (stuffFromThingA) {
// do stuff with stuffFromThingA and then
getstuff(thingB, doCallBackC);
}
关于回调的更多信息:
关于javascript - 异步循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310880/