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. 逻辑赋值
待写