错综复杂的承诺

Imbricated promises

我想做什么: 获取项目列表(来自 API),请求每个项目的状态。并调用一个应该代表我的项目的全局状态的回调。

我是如何尝试的: 第一个 promise 获取所有项目并在第一个 然后 中,我试图为每个项目调用一个 getProjectStatus 来获取状态。我希望我的第二个 then 等待我完成迭代(我尝试了很多不同的东西,但我的第二个 then 总是在之前被调用)。我不知道这是否是对 promises 的一个很好的使用...

  var that = this;
  var options = { url : this.host + "projects", json : true }

  var finalStatus = "SUCCESS";

  // first promises
  return request(this.options)
  .then(function(projects) { 
    projects.forEach(function(element, index, array) {
        // second promises
        that.getProjectStatus(element.id, function(status){})
        .then(function(status) {
            if(status != "SUCCESS)
            {
                finalStatus = "FAILURE";
            }
        });
    })
  })
  .then(function(){
      callback(finalStatus)});

这应该让你继续。您只需在第二个承诺的数组上使用 Promise.all 。我可能不明白 getProjectStatus 的确切语法,但你可以调整我希望如果需要

  return request(this.options)
  .then(function(projects) {
    return Promise.all( projects.map(element => that.getProjectStatus(element.id) )

  .then(function(){
      callback(finalStatus)});