promise & async await总结

204 阅读1分钟

promise

  • promise 有三种状态 等待(pedding),成功(resolve) 拒绝(reject)
  • promise.then 会等待promise内部resolve,并且promise的executor执行完,接着将.then里面的东西放入微任务队列。new promise.resolve().then(callback) callback也会放入微任务队列
  • Promise.then会立即返回一个状态为pending的新Promise对象,这正是它能够支持链式调用的关键。

后续 .then() 的状态:由前一个回调的返回值决定

每个 .then() 都会返回一个新的 Promise(我们称之为 "thenPromise"),这个新 Promise 的状态完全由前一个回调的返回值决定:

  • 如果回调返回一个非 Promise 值(如基本类型、对象等):
    thenPromise 会立即以该值为结果,变为 fulfilled 状态,下一个 .then() 的成功回调会接收这个值。

  • 如果回调返回一个 Promise
    thenPromise 会 “跟随” 这个返回的 Promise 的状态:

    • 若返回的 Promise 被 resolve(x),则 thenPromise 变为 fulfilled,下一个回调接收 x
    • 若返回的 Promise 被 reject(err),则 thenPromise 变为 rejected,下一个回调(或 .catch())接收 err
  • 如果回调抛出错误throw new Error(...)):
    thenPromise 会立即变为 rejected 状态,错误会被下一个 .then() 的失败回调或 .catch() 捕获。

碰到.then 跳过 找同步代码执行完成 回来

catch跟then一样,都会将任务放入微任务队列中。

async await

  • await 会等待右侧的promise完成之后将剩余代码放入微任务队列
  • async对显式返回创建的Promise的处理会安排一个额外的微任务。