【发布时间】:2016-04-02 15:39:48
【问题描述】:
我有一个递归的承诺链,即调用自身直到值等于 0。这很好用,但是当它最终解决时,输出会附加“未定义”值,大概是每个未解决的承诺调用的值。
问题:任何人都可以就处理预期未解决值的最佳做法提出建议吗?
我能想到的选项:
1) 在结果集中处理这些,即删除未定义的值,例如
_.compact(response)
感觉这不是正确的选择,但可能是?
2) 抛出异常,由catch处理。
感谢任何想法 - 代码框架以帮助说明以下问题。
const queueTask = function queueTask(task) {
...
}).then(response => {
if (_.has(task, 'another')) {
let taskConfigs = doSomething(task);
//Add new tasks to queue. Return a promise that will resolve
//only once all the items in array have resolved.
return when.all(taskConfigs.map(function(each) {
return queueTask(each);
}));
}
if (task.remainingTasks === 0) {
return response;
}
}).catch(function (err) {
....
};
【问题讨论】:
-
这是预期的输出。要么做另一种方式(不要排队任务),要么提出一个不这样做的承诺模式的实现(并且不符合 ECMAScript 6 承诺规范)。您只需要结果列表中的最后一个值。如果您担心遍历数组,为什么不直接获取它而不是
_.compact? -
@SergiuParaschiv - 非常感谢,这真的很有帮助。我是 Promises 的新手,所以关于“这是预期的”的第二个意见很棒。很有道理。
标签: javascript node.js recursion promise es6-promise