Javascript 给定字符串数组,迭代每个字符串并调用基于承诺的函数,但要等到上一次迭代完成后再继续?
我有一个字符串数组Javascript 给定字符串数组,迭代每个字符串并调用基于承诺的函数,但要等到上一次迭代完成后再继续?,javascript,Javascript,我有一个字符串数组 var urls = ["http:/www.google.com", "http:/www.giantbomb.com", "http:/www.stackoverflow.com"] 我需要为每个函数调用一个基于承诺的函数……但是我希望在调用下一个函数之前,等待上一个函数完成 _.forEach(urls, function(url){ promiseFunc(url); //BUT IT SHOULD WAIT TO CONTINUE FOR LOOP })
var urls = ["http:/www.google.com", "http:/www.giantbomb.com", "http:/www.stackoverflow.com"]
我需要为每个函数调用一个基于承诺的函数……但是我希望在调用下一个函数之前,等待上一个函数完成
_.forEach(urls, function(url){
promiseFunc(url); //BUT IT SHOULD WAIT TO CONTINUE FOR LOOP
});
有没有一个好的方法来实现这一点
我也在使用AngularJS。在现代环境中,使用
异步
函数和循环:
// In an `async` function
try {
for (const entry of urls) {
await promiseFunc(url);
}
// All done
} catch (error) {
// Handle/report error
}
如果您不想使用async
函数,请使用“承诺减少”技巧:
我还通过递归找到了另一个解决方案
var urls = ["http:/www.google.com", "http:/www.giantbomb.com", "http:/www.stackoverflow.com"];
var executePromiseFunct: function(urls) {
promiseFunc(urls[0]).then(function() {
urls.shift();
if (urls[0]) {
executePromiseFunct(urls);
}
});
}
承诺链接是的,这基本上就是
reduce
版本所做的,但是关键的区别是,您没有得到一个可以用来知道循环何时完成的承诺。(以上也不处理错误。:-)
var urls = ["http:/www.google.com", "http:/www.giantbomb.com", "http:/www.stackoverflow.com"];
var executePromiseFunct: function(urls) {
promiseFunc(urls[0]).then(function() {
urls.shift();
if (urls[0]) {
executePromiseFunct(urls);
}
});
}