递归承诺链末端的链式操作

Chain action at the end of a recursive promise chain

我目前正在尝试使用 Bluebird 库将另一个 .then() 链接到递归承诺链的末尾。

我的代码看起来像这样

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

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

当你递归调用函数时,fetchItems,你需要return这个值,像这样

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

现在,fetchItems return 是另一个承诺,最后的 then 只有在该承诺得到解决后才会被调用。