异步编程
...大约 2 分钟
对Promise的理解
概念
Promise 对象是异步编程的一种解决方案。Promise 是一个构造函数,接收一个函数(executor)作为参数,返回一个 Promise 实例。 一个 Promise 实例有三种状态,分别是pending、fulfilled和rejected,分别代表了进行中、已成功和已失败, 实例的状态只能由 pending 转变 fulfilled 或者 rejected 状态,并且状态一经改变,就凝固了,无法再被改变。 状态改变是通过 resolve() 和 reject() 函数来实现的,可以在异步操作结束后调用这两个函数改变 Promise 实例的状态, 它的原型上定义了一个 then 方法,使用这个 then 方法可以为两个状态的改变注册回调函数。这个回调函数属于微任务,会在本轮事件循环的末尾执行。
注意:在构造 Promise 的时候,构造函数内部的代码是立即执行的。
优点
- 状态不受外界影响,只受异步操作的结果来决定
- 一旦状态改变,任何时候都可以得到这个结果
缺点
- 无法取消promise,一旦新建它就会立即执行,无法中途取消
- 如果不设置回调函数,promise内部抛出的错误,不会反应到外部
- 当处于padding状态时,无法得知具体哪个阶段(刚开始/即将完成)
静态方法
- Promise.all 所有成功才执行then,有一个失败后面都会被忽略并执法catch
- Promise.race 拿到最快的看是then还是catch
- Promise.allSettled 所有执行完毕,返回包含了每个promise结果的对象数组 [{ status: "fulfilled", value: 3 }, { status: "rejected", reason: "foo" }]
- Promise.any 有成功就执行then,输出第一个成功的,所有失败才执行catch ES2021
对async/await的理解
async/await其实是 Generator 的语法糖,它能实现的效果都能用then链来实现,它是为优化then的回调地狱而开发出来的。
Powered by Waline v2.15.5