javascript - 异步循环

标签 javascript asynchronous

一天中的好时光! 我最近开始学习 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);
}

关于回调的更多信息:

  1. > https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests
  2. > http://recurial.com/programming/understanding-callback-functions-in-javascript/
  3. > http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/

关于javascript - 异步循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310880/

相关文章:

javascript - 使用 Windows Live SDK 的 Windows 8 Metro 应用单点登录

javascript - 装有NPM的jQuery抛出$ .ajax不是函数

javascript - 将 Handlebars 模板抽象为不带 AJAX 的外部文件

javascript - getElementById 数组

c# - IAsyncResult 未完成并锁定 UI

javascript - Chrome 扩展 : How to get specific information from a page

c++ - 如何将 IcmpSendEcho2 与 PIO_APC_ROUTINE 一起使用?

javascript - 如何使用 Jasmine 1.3.1 和 Atom 进行异步测试

javascript - 如何根据 Ajax 请求的结果提交(或不提交)表单?

android - ListActivity 的异步更新