Promise几个关键的问题
1.如果当前的Promise状态为pending状态,抛出异常后,Promise就会变成rejected状态
const p6 = new Promise((resolve, reject) => {
//resolve(1) //promise变为resolved成功状态
// reject(2) //promise变为rejected失败状态
throw 3 //抛出异常,Promise变为rejected状态,reason 为抛出的error
})
p6.then(() => {
value => {},
reason => {
console.log('reason',reason)
}
})
2.一个Promise指定多个成功/失败的回调函数,都会调用吗?
//多个调用会全部回调
p6.then(() => {
value => {
console.log('success',value)
},
reason => {
console.log('reason',reason)
}
})
p6.then(() => {
value => {
console.log('success',value)
},
reason => {
console.log('reason',reason)
}
})
3.改变Promise状态和指定回调函数谁先谁后?
//常规:先指定回调函数,后改变的状态
new Promise((resolve, reject) => {
setTimeout(() => { //后改变的状态(同时指定数据,异步执行回调函数)
resolve(1)
})
}).then(() => { //先指定回调函数,保存当前指定的回调函数
value => {},
reason => {
console.log('reason', reason)
}
})
//方法1:先改变状态,在指定回调函数
new Promise((resolve, reject) => {
resolve(1) //先改变的状态(同时指定数据)
}).then(() => { //后指定回调函数,异步执行回调函数
value => {
console.log('value', value)
},
reason => {
console.log('reason', reason)
}
})
//方法2:先改变状态,在指定回调函数
const ps = new Promise((resolve, reject) => {
setTimeout(() => { //后改变的状态(同时指定数据,异步执行回调函数)
resolve(1)
},1000)
})
setTimeout(()=>{
p.then(() => { //先指定回调函数,保存当前指定的回调函数
value => {},
reason => {
console.log('reason', reason)
}
})
},1000)
注意:在Promise中,成功和失败的回调函数,永远是异步执行。即使条件满足了,也不是马上执行。
4.Promise.then返回的新的Promise的结果状态由什么决定?
//(1)简单表达:由then()返回的新的Promise的回调函数执行的结果决定
//(2)详细表达:
//如果抛出异常,新的Promise变为rejected,reason为抛出的异常
//如果返回的是非Promise的任意值,新Promise变为resolved,value为返回值
//如果返回的是另一个新Promise,此Promise的结果就会变为新Promise的结果
new Promise((resolve, reject) => {
resolve(1)
// reject(2)
}).then(
value => {
console.log('onResolved1()', value)
//return 2
//return Promise.resolve(3)
//return Promise.rekect(4)
},
reason => {
console.log('onrejected1()', reason)
}
).then(
value => {
console.log('onResolved2()', value)
},
reason => {
console.log('onrejected2()', reason)
}
)
|