我有以下承诺链,我希望可以返回.finally()的resolve函数,但最后一个.then()是要返回的那个。
exportReportToJson (url,opts) {
const requestJSON = {
"values" : []
};
return this.getValue(url)
.then( value => {
requestJSON.values.push(value);
if(opts.extraValue){
return this.getExtraValue(value);
}else{
return Promise.finally();
}
})
//The index of .push gets returned instead
.then(extraValue => requestJSON.values.push(extraValue))
//But I want requestJSON to always be the returned Promise
.finally( () => requestJSON)
}
如您所见,我希望最终永远成为最终的承诺,这不是为了什么吗?我在这里想念什么?我认为它可以用作.always()
请不要等待。
我想有一个条件.then,而基本上不更改最终.then。
答案 0 :(得分:1)
.finally
不允许您更改承诺的内容;这只是为了进行拆卸逻辑。如果承诺以某种价值解决,那么它仍然以该价值解决;如果拒绝某个值,则该值仍被拒绝。
您可以在此处查看有关其行为的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/finally
如果需要更改值,请使用.then或.catch。如果您还希望两者都具有相同的逻辑,则需要同时使用两者。这要么意味着复制代码,要么将其提取到命名函数中。
答案 1 :(得分:0)
没有Promise.finally
功能。看来您真正想要的是
function exportReportToJson (url,opts) {
return this.getValue(url).then(value => {
if (opts.extraValue) {
return this.getExtraValue(value).then(extraValue => [value, extraValue]);
} else{
return [value];
}
}).then(values => {
const requestJSON = {values};
return requestJSON;
});
}