在JavaScript中,所有的代码都是单线程执行的,这就导致了其所有的网络请求,IO操作,浏览器时间等都是异步非阻塞的模式执行的,这就使得代码的执行顺序可能会超出我们的掌控。

尤其是当多个异步操作待执行,我们需要控制它的顺序的时候。这时一般的解决方法是回调,Generator,Promise或者await/async等,这里我主要记录Promise。

Promise本质上是一个绑定了回调的对象,把执行代码和结果代码清晰的分离了。

一个Promise对象大致有三个状态 :

  • pending: 初始状态,既不是成功,也不是失败状态。
  • fulfilled: 操作成功完成。
  • rejected: 操作失败。

then函数其实有两个回调函数successCallback和failureCallback。前者是成功时的回调,后者是失败时的回调,一般情况下我们只用了第一个successCallback回调,失败状态靠catch来捕捉,其实本质上catch(failureCallback) 是 then(null, failureCallback)的缩写,那么可以知道,这两者在大部分情况下都相等,但在比如当successCallback中抛出了错误,此时第二个回调failureCallback是捕捉不到的,而catch可以。

在一个catch(即失败操作)触发后,并不影响后续的链式操作。

后续未完......

posted on 2018-09-27 22:05  蜘蛛侦探  阅读(103)  评论(0编辑  收藏  举报