ES2021 新特性

汇总

1. Promise combinators

1.1 Promise.any()

  • Promise.any 接收一个 promise 可迭代对象
  • 只要其中的一个 promise 成功,就返回那个已经成功的 promise
  • 如果可迭代对象中没有一个 promise 成功(即所有的 promises 都失败/拒绝),Promise.any 将返回异步失败,和一个 AggregateError 对象,它继承自 Error,有一个 error 属性,属性值是由所有失败值填充的数组。
// 至少有一个成功
const pErr = new Promise((resolve, reject) => {
  reject("总是失败")
})
const pSlow = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, "最终完成")
})
const pFast = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, "很快完成")
})
Promise.any([pErr, pSlow, pFast]).then((value) => {
  console.log(value)
})
// 期望输出: "很快完成"
// 全部(失败 or 拒绝)
const pImmediatelyErr = new Promise((resolve, reject) => {
    reject("总是失败")
})
const pSlowErr = new Promise((resolve, reject) => {
    setTimeout(reject, 500, "最终失败")
})
const pFastErr = new Promise((resolve, reject) => {
    setTimeout(reject, 100, "很快失败")
})
Promise.any([pImmediatelyErr, pSlowErr, pFastErr]).catch((err) => {
    console.log(err)
})
// 期望输出: "AggregateError: All promises were rejected"

1.2 combinators 汇总

方法 描述 标准
Promise.any() 只要有一个 Promise 成功,立即返回成功,全部失败返回 AggregateError
ES-2021
Promise.allSettled() 所有 Promise 完成才返回(无论成功 or 失败),返回结果数组
ES-2020
Promise.race() 只要迭代器中的一个 Promise 完成就返回结果(无论结果是成功 or 失败)
ES-2015
Promise.all() 只要一个 Promise 失败,立即返回失败,全成功返回成功数组
ES-2015

推荐阅读

2. replaceAll()

es2021之前提供的字符串替换方法 replace方法 ,当一个参数是字符串时,只替换第一个匹配的字符串

'ASDFA'.replace('A', 'M')
// "MSDFA"

如果需要替换所有匹配的字符串,第一个参数需要使用正则

'ASDFA'.replace(/A/g, 'M')
// "MSDFM"

有了 replaceAll 方法,可直接替换全部匹配的字符,不再需要使用正则

'ASDFA'.replaceAll('A', 'M')
"MSDFM"

推荐阅读

3. 数字分隔符

以前写大数时,过长的话不同容易读取

100000000
// 1e

现在为了提高可读性,使用下划线作为数字的分隔符

100_000_000
// 1e
1_0000_0000
// 1e

推荐阅读

4. 弱引用

待写

5. 逻辑赋值

待写


Comments

Leave a Comment