Appearance
Promise.resolve和Promise.reject
本节目标:理解“Promise.resolve和Promise.reject”的核心思路,并能把它用于实际开发或面试表达。
Promise.resolve方法会:
- 创建一个新的
promise; - 直接调用让
promise状态成功的方法,并将参数作为成功的值传递出去;
static
resolve(value){ // 我们希望有等待效果 就用Promise.resolve方法 return new
Promise((resolve,reject)=\> {
resolve(value);})
}
staticreject(reason){//Promise.reject不具备等待效果 return new
Promise((resolve,reject)=\> {
reject(reason);})
}当Promise.resolve()的参数是一个promise时:
- 会给这个
promise通过then添加成功和失败回调; - 成功的回调函数是
Promise.resolve内部所创建promise的reslove方法,失败回调函数是Promise.resolve内部所创建promise的reject方法;
因此:
- 如果参数
promise状态成功,会调用Promise.resolve内部所创建promise的resolve方法:- 触发的回调:
Promise.resolve().then所添加的成功回调; - 传给回调的值:参数
promise的成功值;
- 触发的回调:
- 如果参数
promise状态失败,会调用Promise.resolve内部所创建promise的reject方法,所以- 触发的回调:
Promise.resolve().then所添加的失败回调; - 传给回调的值:参数
promise的成功值;
- 触发的回调:
- 当参数函数是一个内部报错的函数时:由于
resolve方法只会判断参数是不是一个promise,如果是一个promise就等待,否则,只是将参数作为成功值传递出来,即使参数是一个会抛错的函数也不例外; - 当参数函数是一个错误时,由于错误在参数中,不等Promise.resolve的执行,错误就抛出去了,如果这个错误没有被处理,会报Uncaught Error;
const errorFn = () =\> {
console.log('参数函数调用
') `throw` `new`
Error('函数出错了
')
}
Promise.resolve(errorFn()).then((value)=\> {
console.log('成功
',value)
},(reson)=\> {
console.log('失败
',reson)
})总结下来就是Promise.resolve对传入的参数会做是不是promise的判断,
- 如果是
promise,会有等待效果,即如果参数是一个promise,会等级它的状态凝固后才触发.then添加的回调函数;- 如果参数
promise成功,触发.then成功回调,传递参数promise的成功值; - 如果参数
promise失败,触发.then失败回调,传递参数promise的失败原因;
- 如果参数
- 如果不是promise,就简单地把参数作为成功值传递出来;
- 并且触发.then的成功回调,把Promise.resolve的参数作为成功值;
当
resolve参数;then的成功回调函数;then的失败回调函数;
为promise时,promise都会
- 等待这些
promise的状态凝固; - 将这些
promise的成功值或失败原因传递出去; - 传递给之前
promise的then成功回调(状态成功时)或失败回调(状态失败时);
