三个状态:pending resolve reject
// 最初创建promise对象时,默认状态是pending,如果在函数体内部调用了第一个参数对应的函数,则状态变成了resolved;如果调用了第二个参数对应的函数,则状态变成了rejected。
const p = new promise((resolve, reject) => {
resolve() // 当调用resolve时,执行 then和catch的第一个参数
// reject()
})
return p
p.then( (res) => { console.log('对的时候执行我'),(err) => {console.log('错的时候执行我'}).catch( (err) => {console.log('错的时候执行我')}).finally(() => {
console.log('可以不写我,或者我会在自定义情况下执行');
})
在构造器的函数体中,一旦状态发生了变化,就会进行then,或者是catch中去,同时把promiseValue传入对应的函数。
具体来说:
-
状态从pending变成resolved,进入then中,调用函数,并传入此时的promiseValue(就是调用resolve时传入的实参)
-
状态从pending变成rejected,进入catch中,调用函数,并传入此时的promiseValue(就是调用reject时传入的实参)
根据实际情况的需要,也可以不加上finally()。
献上经典案例