跳至主要內容

异步编程

狮子...大约 2 分钟面试JavaScript

对Promise的理解

概念

Promise 对象是异步编程的一种解决方案。Promise 是一个构造函数,接收一个函数(executor)作为参数,返回一个 Promise 实例。 一个 Promise 实例有三种状态,分别是pending、fulfilled和rejected,分别代表了进行中、已成功和已失败, 实例的状态只能由 pending 转变 fulfilled 或者 rejected 状态,并且状态一经改变,就凝固了,无法再被改变。 状态改变是通过 resolve() 和 reject() 函数来实现的,可以在异步操作结束后调用这两个函数改变 Promise 实例的状态, 它的原型上定义了一个 then 方法,使用这个 then 方法可以为两个状态的改变注册回调函数。这个回调函数属于微任务,会在本轮事件循环的末尾执行。
注意:在构造 Promise 的时候,构造函数内部的代码是立即执行的。

优点

  1. 状态不受外界影响,只受异步操作的结果来决定
  2. 一旦状态改变,任何时候都可以得到这个结果

缺点

  1. 无法取消promise,一旦新建它就会立即执行,无法中途取消
  2. 如果不设置回调函数,promise内部抛出的错误,不会反应到外部
  3. 当处于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