递归承诺链末尾的链操作

时间:2015-08-19 09:20:09

标签: javascript recursion promise bluebird

我目前正试图将另一个.then()链接到带有Bluebird库的递归承诺链的末尾。

我的代码看起来像这样

exports.fetchAll = function() {

  fetchItems = function(items) {
    return somethingAsync()
      .then(function(response) {
        items.push(response.data);
        if (response.paging.next) {
          fetchItems();
        } else {
          return items;
        }
      })
      .catch(function(error) {
        console.log(error);
      });
  }

  return fetchItems([], 0);
}

/// In Some other place

fetchAll().then(function(result){ console.log(result); });

截至目前,fetchAll调用结束时的.then会立即返回。如何使它在递归链的末尾执行?

1 个答案:

答案 0 :(得分:1)

当你以递归方式调用函数fetchItems时,你需要返回值,就像这样

if (response.paging.next) {
  return fetchItems();        // Note the `return` statement
} else {
  return items;
}

现在,fetchItems返回另一个承诺,只有在该承诺解决后才会调用最后的then