Imbricated promises

时间:2016-01-13 16:34:01

标签: javascript node.js promise httprequest

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

我是如何尝试的:第一个 承诺 获取所有项目并在第一个 然后< / em> 我试图为每个项目调用一个应该获得状态的getProjectStatus。我希望我的第二个 然后 等待我完成迭代(我尝试了许多不同的东西,但我的第二个然后总是被调用)。我不知道这是否很好地使用了承诺......

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

1 个答案:

答案 0 :(得分:1)

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

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

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