ES2020新特性(简称:ES11)

文章介绍了Promise的三个新特性:Promise.all用于等待所有Promise完成,Promise.any取第一个成功的结果,Promise.allSettled获取每个Promise的完整状态。另外,还提到了??逻辑运算符和?.链式判断运算符,以及动态导入模块和BigInt大数类型在防止精度丢失上的作用。
摘要由CSDN通过智能技术生成

一:promise

传统的promise.all:所有的promise均为成功,才可以走入then的回掉(参数为数组),只要有一个失败,则走入catch的回掉

举个例子

const promises = [
 Promise.resolve(1),
 Promise.resolve(2),
 Promise.reject('error')
];
 
 
Promise.all(promises)
 .then(responses => console.log(responses))
 .catch(e => console.log(e)) 
// 结果为"error"



const promises = [
 Promise.resolve(1),
 Promise.resolve(2),
];
 
 
Promise.all(promises)
 .then(responses => console.log(responses))
 .catch(e => console.log(e)) 
// 结果为[1,2]

1.promise.any:有多个异步计算,同时仅仅用第一个计算最快且成功的

const promises = [
 Promise.resolve(1),
 Promise.resolve(2),
];
 
 
Promise.any(promises)
 .then(responses => console.log(responses))
 .catch(e => console.log(e))
// 结果为1

2.Promise.allSettled:全部进入then的回掉,并且可以拿到每个Promise的状态, 而不管是否成功还是失败

Promise.allSettled([
  Promise.reject({ code: 500, msg: '服务异常' }),
  Promise.resolve({ code: 200, list: [] }),
  Promise.resolve({ code: 200, list: [] })
]).then(res => {
  console.log(res)
})
//[
    {
        "status": "rejected",
        "reason": {
            "code": 500,
            "msg": "服务异常"
        }
    },
    {
        "status": "fulfilled",
        "value": {
            "code": 200,
            "list": []
        }
    },
    {
        "status": "fulfilled",
        "value": {
            "code": 200,
            "list": []
        }
    }
]

二:运算符

1.??:判断运算符,左侧是否为nullundefined时,才会返回右侧的值,类似||

'' ?? 1 // ''
'' || 1 // 1
0 ?? 1  // 0
0 || 1  // 1
null ?? 1 // 1
null || 1 // 1
undefined ?? 1 // 1
undefined || 1 // 1

2.?.链式判断运算符,一般代码用来处理类似(res&&res.data&&res.data.id)

可简化为:res?.data?.id

如果res或res.id是null/undefined,表达式将会短路计算直接返回undefined。

三.import()

动态导入:

import('/modules/my-module.js')
  .then((module) => {
    // 动态导入,并在导入成功后做一些操作
  });

支持await:

let module = await import('/modules/my-module.js');
//import(module) 函数可以在任何地方调用。它返回一个解析为模块对象的 promise。

四.BigInt():可以大数计算,防止丢失精度

const aNumber = 111;
const aBigInt = BigInt(aNumber)
console.log(aBigInt)
// 111n

只要在数字末尾加上 n,就可以正确计算大数

2n*8n=16n

但是不能将 BigInt与Number混合使用。比较Number和 BigInt是可以的,但是不能把它们相互运算

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值