下面是promise链接代码:
new Promise(function(resolve, reject) {
console.log('first');
resolve('yes');
}).then(
new Promise(function(resolve, reject) {
console.log('second');
reject('no');
})
).catch(rej => console.log(rej));
输出为:
“第一”
“第二”
我希望得到一个'no'输出,但是没有。 我不知道为什么抓住没有抓住第二个.then()的拒绝?
答案 0 :(得分:4)
.then
仅接受功能作为参数-您的
then(new Promise
正在将第二个.then
传递给 Promise (在创建Promise
链时,而不是在先前的Promise
解析时,它会初始化*)。但是.then
不知道在传递Promise
时该怎么做,它只处理 function 参数。
相反,传递.then
一个函数,并让该函数创建要返回的Promise,它将被正确捕获:
new Promise(function(resolve, reject) {
console.log('first');
resolve('yes');
}).then(
() => new Promise(function(resolve, reject) {
//^^^^^^
console.log('second');
reject('no');
})
).catch(rej => console.log('catch: ' + rej));