递归承诺链末端的链式操作
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
只有在该承诺得到解决后才会被调用。
我目前正在尝试使用 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
只有在该承诺得到解决后才会被调用。