Skip to content

Promise.resolve和Promise.reject ​

本节目标:理解“Promise.resolve和Promise.reject”的核心思路,并能把它用于实际开发或面试表达。 Promise.resolve方法会:

  • 创建一个新的promise;
  • 直接调用让promise状态成功的方法,并将参数作为成功的值传递出去;

static

resolve(value)

{ // 我们希望有等待效果 就用Promise.resolve方法 return new

Promise((resolve,
reject)

=\> {

resolve(value);
})
}
static
reject(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成功回调(状态成功时)或失败回调(状态失败时);

本站总访问 — 次