返回介绍

ES2017

发布于 2024-09-07 18:02:44 字数 3098 浏览 0 评论 0 收藏 0

声明

  • 共享内存和原子操作:由全局对象 SharedArrayBufferAtomics 实现,将数据存储在一块共享内存空间中,这些数据可在 JS 主线程和 web-worker 线程之间共享

字符串扩展

  • padStart() :把指定字符串填充到字符串头部,返回新字符串
  • padEnd() :把指定字符串填充到字符串尾部,返回新字符串

对象扩展

  • Object.getOwnPropertyDescriptors() :返回对象所有自身属性(非继承属性) 的描述对象
  • Object.values() :返回以值组成的数组
  • Object.entries() :返回以键和值组成的数组

函数扩展

  • 函数参数尾逗号:允许函数最后一个参数有尾逗号

Async

  • 定义:使异步函数以同步函数的形式书写( Generator 函数语法糖)
  • 原理:将 Generator 函数和自动执行器 spawn 包装在一个函数里
  • 形式:将 Generator 函数的 * 替换成 async ,将 yield 替换成 await
  • 声明
    • 具名函数: async function Func() {}
    • 函数表达式: const func = async function() {}
    • 箭头函数: const func = async() => {}
    • 对象方法: const obj = { async func() {} }
    • 类方法: class Cla { async Func() {} }
  • await 命令 :等待当前 Promise 对象状态变更完毕
    • 正常情况:后面是 Promise 对象则返回其结果,否则返回对应的值
    • 后随 Thenable 对象:将其等同于 Promise 对象返回其结果
  • 错误处理 :将 await 命令 Promise 对象放到 try-catch 中(可放多个)

Async 对 Generator 改进

  • 内置执行器
  • 更好的语义
  • 更广的适用性
  • 返回值是 Promise 对象

应用场景

  • 按顺序完成异步操作

重点难点

  • Async 函数返回 Promise 对象,可使用 then() 添加回调函数
  • 内部 return 返回值会成为后续 then() 的出参
  • 内部抛出错误会导致返回的 Promise 对象变为 rejected 状态,被 catch() 接收到
  • 返回的 Promise 对象必须等到内部所有 await 命令 Promise 对象执行完才会发生状态改变,除非遇到 return 语句或抛出错误
  • 任何一个 await 命令 Promise 对象变为 rejected 状态,整个 Async 函数都会中断执行
  • 希望即使前一个异步操作失败也不要中断后面的异步操作
    • await 命令 Promise 对象放到 try-catch
    • await 命令 Promise 对象跟一个 catch()
  • await 命令 Promise 对象可能变为 rejected 状态,最好把其放到 try-catch
  • 多个 await 命令 Promise 对象若不存在继发关系,最好让它们同时触发
  • await 命令只能用在 Async 函数之中,否则会报错
  • 数组使用 forEach() 执行 async/await 会失效,可使用 for-of 和 P romise.all() 代替
  • 可保留运行堆栈,函数上下文随着 Async 函数的执行而存在,执行完成就消失

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文