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);
    }
  });
}