文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
ES2017
声明
- 共享内存和原子操作:由全局对象
SharedArrayBuffer
和Atomics
实现,将数据存储在一块共享内存空间中,这些数据可在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
和 Promise.all()
代替 - 可保留运行堆栈,函数上下文随着
Async
函数的执行而存在,执行完成就消失
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论