是否有一个能够获取Promise的值并将它推送到承诺链而不显式返回的速记?执行一个中间操作并将以前的结果保留在bluebird中
换句话说,有没有在青鸟以下的简写语法:
.then(result => { callSomething(result); return result })
是否有一个能够获取Promise的值并将它推送到承诺链而不显式返回的速记?执行一个中间操作并将以前的结果保留在bluebird中
换句话说,有没有在青鸟以下的简写语法:
.then(result => { callSomething(result); return result })
如果你要经常使用这种模式,为什么不把一个普通的方法为它
Promise.prototype.skip = function skip(fn, onRejected) {
return this.then(value => Promise.resolve(fn(value)).then(() => value), onRejected);
};
比方说,你的榜样callSomething
返回一个承诺
function callSomething(v) {
console.log('skip got', v);
// this promise will be waited for, but the value will be ignored
return new Promise(resolve => setTimeout(resolve, 2000, 'wilma'));
}
现在,b。使用skip
,而不是的then
,即将到帐的价值,在这种情况下,fred
,只会传递下面的then
,但在callSomething
返回的承诺满足
Promise.resolve('fred').skip(callSomething).then(console.log); // outputs "fred"
但是,如果callsomething
不返回无极
您可以使用箭头功能的体内Comma operator(不包括大括号):
.then(result => (callSomething(result), result)
的逗号运算符
评估它的每个操作数(从左到右)并返回最后一个操作数。
所以,result
由表达式返回:
(callSomething(result), result)
然后,不花括号中的箭头函数,返回指定为它的身体的表达式的值。因此,返回result
。
'所以你总是在onFulfilled和onRejected回调函数中返回一个承诺的值,以便将值传递给链中'你的声明意味着'onFulfilled'必须返回一个承诺 - 至少这是我推断它的方式,我可能是单独在那个推论中。它是'.then'必须返回一个承诺,而不是它的回调 - 虽然他们**可以返回一个承诺,当然是 –
你是对的@JaromandaX:它是'.then',*必须*返回一个承诺,而不是回调也可以返回简单的值。我从我的答案中删除了那部分内容,因为这是不正确的,而且不太恰当。谢谢。 – Andrea
你必须,但短期和直列箭头功能我喜欢逗号操作符,比如'。那么(V =>返回它没关系(doSomething的(v),v))'。 – Redu