Promise解决的问题

1、回调地狱 + 异步同步事件调用顺序带来的双重伤害

嵌套的回调地狱
为什么要用Promise?
为什么要用Promise?
为什么要用Promise?
为什么要用Promise?

由此可见,对于Promise的执行很好的规范了对于复杂的嵌套回调的写法,并且对于异步事件的执行顺序也是更加清晰。

2、回调事件的分离

Promise有三种状态:未定(pending)、接受(fulfillment)和拒绝(rejection)。并且,只能由未定状态变为接受状态,或者由未定状态变为拒绝状态。

var promise = new Promise(function(resolve, reject) {
  if (/* 异步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});
promise.then(()=>console.log(),()=>console.log)

只有调用resolve或reject回调函数时,这个Promise的状态才能从未定向其他两个状态改变。并且可以将异步操作的函数分离出来,提高了复用性。

对于上图可以看出,then是有返回值的,它返回一个新的Promise(与此前任何一个Promise都不同)。然而这个Promise的行为与then中回调函数的返回值有关。也就是说,下一级的then到底执行那个函数只看上一级then方法有没有异常,没有就是第一个方法,而与更上层的promise状态没有任何关系。

纯属个人理解,如果有理解不对的地方,欢迎批评指导!

相关文章: