如何知道所有异步回调何时执行?

时间:2012-10-17 17:21:15

标签: javascript asynchronous callback

我正在迭代一个数组中的URL列表,并且我正在下载整个页面的每个URL。

var urlInformations = [];
var count = 0;
urls.forEach(function(url) {
    // download and add to urlInformations
    count++
    if (count == urls.length) {
        // do something after all URLs are processed
    }
});

现在,我正在处理这个问题的方法是保持一个元素的数量,在匿名函数中递增它,如果计数达到我拥有的URL的数量,那么我会做我需要的。这里可能存在竞争条件和并发问题,对吧?该怎么做?

2 个答案:

答案 0 :(得分:2)

没有。 Javascript是单线程的,这意味着如果你增加一个计数器,然后将它与某个数字进行比较以确定是否继续,你基本上只是实现了一个信号量。这样做不会出现并发问题。

答案 1 :(得分:0)

(XMLHttpRequest).addEventListener('load', handleload, false);

function handleload(e) {
    //dostuff
}

XMLHttpRequest的加载事件在加载完成后触发;你正在追求的是什么?