ES2020
babel 7.8以上可以使用 ES2020
一、Promise.allSettled()
ES6 中的 Promise.all()有点简陋,只要其中一个失败,就全部失败
ES2020 新增 Promise.allSettled(),可以返回每一个 Promise 的结果和状态
通过Promise.reject(错误内容)来模拟Promise.all遇到一个异步报错情况
async test(){
const res = await Promise.all([
Promise.resolve({code:200,msg:"请求成功"}),
Promise.resolve({code:200,msg:"请求成功"}),
Promise.reject({code:500,msg:"请求失败"})
]).catch(err=>console.log(err))
if(res){
//数据操作
}}all 只要有一个报错,就会走到 catch 中,成功的请求也不会暴露出来使用。 走到 catch 的 err 就是 reject 的错误内容
Promise.allSettled()的返回结果,是每个Promise请求的状态及结果内容
async test(){
const res = await Promise.allSettled([
Promise.resolve({code:200,msg:"请求成功"}),
Promise.resolve({code:200,msg:"请求成功"}),
Promise.reject({code:500,msg:"请求失败"})
])
console.log(res)
const successList = res.filter(item=>item.status!==\'rejected\')
const errorList = res.filter(item===item.status===\'rejected\')
errorList.forEach(item=>alert(item.reason.msg))
successList.forEach(item=>{
// 数据操作
// item.value.msg
})}promise.allSettled() 成功失败都会走 then,用await则都会往下走不像all()那样把成功放then,失败放catch,用 await 就会卡住不往下走成功失败都会返回成一个对象数组,并带有状态status属性,如下res 的值是
[
{status:"fulfilled", value:{code:200,msg:"请求成功"},
{status:"fulfilled", value:{code:200,msg:"请求成功"},
{status:"rejected", reason:{code:500,msg:"请求失败"}]因此可以灵活操作成功和失败的Promise(通过数组筛选方法)
const successList = res.filter(item => item.status !== "rejected");const errorList = res.filter((item === item.status) === "rejected");errorList.forEach(item => alert(item.reason.msg));successList.forEach(item => {
// 数据操作
// item.value.msg});二、可选链
ES6 中通过
短路运算符 &&可以简化很多代码,但是大量链式短路运算符依然冗余
const vipLevel = res.userInfo && res.userInfo.vip;通过可选链
?.的形式,可以简化再写一次父级对象的写法
const vipLevel = res?.userInfo?.vip;三、空值合并运算符
ES6 中
|| 或运算符 前面的值判定为false就会执行后面有时候,数字 0、空字符串,希望不执行后面而是取原值,再 ES6 中的写法就是不用||,而是用是否===undefinded来判断 ES2020空值合并运算符 ??就不会把数字 0,空字符串判定为 false
const vipLevel = res.userInfo.vip || "暂无等级"; // 0级应该执行前面,这样写会执行后面
const vipLevel = res.userInfo.vip ?? "暂无等级"; // 0和空字符串会执行前面四、?.、??结合使用
结合上面 2 种语法(可选链、空值运算符)
const vipLevel = res?.userInfo?.vip ?? "暂无等级"; // 0和空字符串会执行前面五、统一全局变量
node 全局变量
globalweb 全局变量window、self两者都可以通过this 来作全局变量,但是很危险,因此不建议 web 一般用windowself 在serviceWorker的时候用到(也可以用 this,不推荐)globalThis