【发布时间】:2018-06-12 23:53:23
【问题描述】:
我遇到需要发出多个 ajax 请求的情况。我需要访问的 URL 作为字符串包含在 listOfUrls 数组中。
我想做的是发出一个 ajax 请求,对其进行处理,将数据反馈到我的应用程序中,然后转到下一个。
我现在得到的代码的基本版本是这样的
var fetch = function(url) {
$.get(url, function(response) {
// do stuff with the data
};
return someData;
};
for(let i = 0; i < listOfUrls.length; i++) {
fetch(listOfUrls[i]);
console.log("Fetching " + listOfUrls);
};
// do more stuff after all requests are finished
这里的问题是这些是异步请求,虽然我可能只使用同步请求,但我真的不想冒险 - 然后我将无法在循环中使用 console.log,因为浏览器会挂起。
我更喜欢使用 promise 来遍历循环:
var fetch = function(url) {
$.get(url, function(response) {
// do stuff with the data
};
return someData;
};
for(let i = 0; i < listOfUrls.length; i++) {
fetch(listOfUrls[i]).done( /* move onto the next one */ ).fail( /* throw an error */ );
console.log("Fetching " + listOfUrls);
};
// do more stuff after all requests are finished
Promise 显然不能强制通过 for 循环进行迭代。
我将如何实现这种行为?
【问题讨论】: