Promise理解

268 阅读1分钟

解决什么问题

解决异步操作函数里的多层嵌套回调(回调地狱)

原理

三种状态

  • Fulfilled:Promise执行成功
  • Rejected:Promise执行失败
  • Pending:Promise正在执行中 一个promise的状态只可能从pending 变为 fulfilled ,或者 pending 变为 rejected,不能逆向转换,同时“完成”态和“拒绝”态不能相互转换。

API概述

  1. 构造器
let p = new Pomise((resolve, reject) => {
  // resolve(...) 决议/完成
  // reject(...) 用于拒绝这个promise
})
  1. 原型方法 then/catch/finally

  2. 本身方法

  • Promise.all([...]) :按顺序全部执行
  • Promise.race([...]):返回执行最快的一个promise结果
  • Promise.resolve()
  • Promise.reject()

thenable对象

  • 定义:具有then(...)方法的对象和函数
  • 所有的Promise都是thenable对象,但并非所有thenable对象都是Promise

Promise/A+规范

主要Promise方法是都含有new Promise(function(resolve, reject){})、then、resolve等方法

与setTimeout的区别

promise 是微任务,setTimeout 是宏任务,同一个事件循环中,promise.then 总是先于 setTimeout 执行。

如何控制promise任务的并发数

  • 用Promise.race来实现
  • 步骤:先循环把并发池塞满,利用Promise.race方法来获得并发池中某任务完成的信号, 每当并发池跑完一个任务,就再塞入一个任务,请求结束后将该Promise任务从并发池中 移除,直到全部的请求被取完。

实现异步的方法

setTimeout,事件监听,观察者模式,promise,generator,async/await,第三方async库