Promise的几个重要问题
一、 Promise什么时候发生状态改变?什么时候获取值?
前面说过Promise的excutor是同步执行的回调函数,但是可以触发异步任务,因此有两种情况:
-
在excutor执行器中立即同步执行调用敲定函数,于是同步的实例改变状态并且获取到结果
-
在excutor执行器中异步的执行调用敲定函数,比如setTimeout,于是异步的改变实例状态并获取结果
二、Promise的实例一定要改变状态前指定回调函数吗?
不!Promise的实例可以在任何时候指定或者说绑定回调函数
-
改变前:
const promise = new Promise((fulfill, reject) => { setTimeout(()=>{ fulfill(true) }, 1000) }) promise.then(onFulfilled, onRejected)
-
改变后:
同步的改变状态const promise = new Promise((fulfill, reject) => { fulfill(true) }) promise.then(onFulfilled, onRejected)
或者,异步的绑定回调
const promise = new Promise((fulfill, reject) => { setTimeout(()=>{ fulfill(true) }, 1000) }) setTimeout(()=>