对同一个promise调用多次then方法。

平时没有碰到promise重复调用的场景,所以一开始也不能确定到底会发生什么。只能实际跑一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
let test = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("success");
}, 1000);
});

let successHandle = (params) => {
console.log("params:", params);
}

let errorHandle = (error) => {
console.log("error:", error);
}

test.then(successHandle)
.catch(errorHandle);

test.then(successHandle)
.catch(errorHandle);

实际两个then里面的函数都被执行了。查了一下MDN有明确的叙述。

回调函数始终会在then返回值后被调用,即使promise早已完成或已被拒绝。也可对多次调用同一个promise的then方法。所有的回调函数会按照其注册的顺序被调用。


当多次调用同一个promise的then方法,所有注册的回调函数独立执行。如,当在一个回调函数中出现异常时,不会影响后面回调函数的执行。回调函数的结果只会对其注册所使用的then方法返回的promise产生影响,每一次调用then方法返回的都是不同的promise对象。

第一个then在1秒后被调用,第二个then因为promise已经是fullfilled状态,所以会被立即执行。

catch和then表现一样。

参阅