Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ES2021 新特性 #2

Open
lr6 opened this issue Jan 19, 2024 · 0 comments
Open

ES2021 新特性 #2

lr6 opened this issue Jan 19, 2024 · 0 comments

Comments

@lr6
Copy link
Owner

lr6 commented Jan 19, 2024

汇总

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

待写

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant