官网链接: http://bluebirdjs.com/docs/api/tap.html
下面的例子可以看出:
若tap上面resolve的value是简单类型:不管tap如何更改value,tap的下一级then接受的都是原始的value值。
若tap上面resolve的value是复杂类型 : 因为传递的只是引用,所以,tap改了,下面的then收到的value也会被改。
const Promise = require('bluebird');
function complexTypePromiseChain() {//复杂类型
return Promise.resolve({a: 1})
.tap(value => {value.a = 2;})//即使没有return
.then(console.log);//{a: 2}
}
complexTypePromiseChain();function simpleTypePromiseChain() {//简单类型
return Promise.resolve(1)
.tap(console.log) //1
.then(console.log); //1
}
simpleTypePromiseChain();function tapReject() {
return Promise.resolve(1)
.tap(() => Promise.reject(new Error('rejected...'))
.then(console.log)
.catch(error => console.log(error.message)));//rejected...
}
tapReject();
1540

被折叠的 条评论
为什么被折叠?



