Promise中有多个resolve
问题: Promise中有多个resolve时,后面的resolve会不会覆盖掉前面的resolve?
eg:
const promise = new Promise ((resolve, reject) => {
resolve("success 1") // 成功
reject("error") // 失败
resolve("success 2")
})
promise
.then((res) => {
console.log('then:', res)
})
.catch((err) => {
console.log('catch', err)
})
那么代码执行的结果会是什么呢?
// 打印结果
// then: success1
原理:
-
首先我们要知道,Promise中有三种状态,分别为成功 fulfilled、失败 rejected、等待 pending
-
状态变更
pending --> fulfilled
pending --> rejected一旦状态确定就不可更改!
-
resolve和reject函数是用来改变状态的
resolve:fulfilled
reject:rejected -
Promise中,只要遇到resolve,就会将resolve状态凝固并记录下来,后面再出现其他resolve时,不会覆盖之前的resolve;
-
.then(res => { })中回调的res,是第一个resolve状态的值。