我有一个递归的promise链,即调用自身直到值等于零。这很好用但是当它最终解决时,输出会附加“未定义”值,大概是每个未解析的promise调用值。
问题:有人可以就最佳做法提出建议,以处理预期未解决的值吗?
我能想到的选项:
1)在结果集中处理这些,即删除未定义的值,例如
_.compact(response)
这不是正确的选择,但可能是?
2)抛出一个由捕获处理的异常。
感谢任何想法 - 代码骨架,以帮助说明下面的问题。
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) {
....
};
答案 0 :(得分:0)
感谢@SergiuParaschiv的评论,这是预期的行为。
我通过简单地删除" undefined"使用下划线_.compact
方法的响应。
答案 1 :(得分:0)
对于初学者,我发现你的代码存在两个问题:
当条件_.has(task, 'another')
和task.remainingTasks === 0
都为假时,您希望得到什么样的回复,猜测这是undefined
值的来源。
您将直接返回when.all
响应,这是一个数组,是您想要的吗?
我会将您的代码修改为:
}).then(response => {
if (_.has(task, 'another')) {
let taskConfigs = doSomething(task);
return when.all(taskConfigs.map(function(each) {
return queueTask(each);
})).then(resultArray => response); // or whatever kind of result you want to post.
}
return response;
}).catch(function (err) {