Javascript在for循环中的Promise

时间:2016-05-31 15:30:42

标签: javascript for-loop asynchronous xmlhttprequest promise

我正在构建一个程序,它将excel文件作为上传,解析特定文本,然后将该文本(或相关信息)附加到我的html主体。

我的程序的一部分将URL作为输入并找到最终的URL(重定向后的最终登录页面)。我发现这样做的一种方法是使用XMLHttpRequest的responseURL属性。这当前发生在for循环中。我发现,如果我试图将它直接附加到控制台(没有承诺),它将显示为空白(我相信因为ResponseURL是异步的,并且在我尝试追加时尚未完成)。所以我发现承诺是一种潜在的解决方案。我的问题是,当它是for循环的一部分时,我不知道如何正确地实现promise。

为了澄清,我有一个数组中的URL列表。然后我逐个浏览一个URL,提取信息(这是我使用responseURL的地方),然后我将该信息附加到我的HTML正文,然后转到下一个URL做同样的事情。我尝试了各种方法,但它们都以不同的方式打破了我的计划。

我的目标是使用promise异步运行responseURL,并在完成后将结果附加到html。以下是我目前实现的代码:

回复网址功能

function finalURLGrabber(ID) {
    return new Promise(function(resolve) {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', ID, true);
        xhr.onload = function() {
            resolve(xhr.responseURL);
        };
        xhr.send(null);

    });
}
for循环中的

代码

 $('#body').append(Image Source</h2><div class="imageSource content">' + finalURLGrabber(imageSource).then(function(value) {
                    return value;
                }) + '</div></div>');

当我运行该功能时,附加在身体上的是“对象承诺”&#39;而不是最终的网址。

我的问题如下:

  1. 在这种情况下承诺是正确的吗?
  2. 如果是,如何在for循环中正确实现它们?

0 个答案:

没有答案