es12

发布时间 2023-11-27 16:55:48作者: 柯基与佩奇

1. Promise.any

E12 新增的 Promise 的方法

接收一个 Promise 数组,数组中如有非 Promise 项,则此项当做成功
如果有一个 Promise 成功,则返回这个成功结果
如果所有 Promise 都失败,则报错

// 当有成功的时候,返回最快那个成功
function fn(time, isResolve) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      isResolve
        ? resolve(`${time}毫秒后成功!!!`)
        : reject(`${time}毫秒后失败!!!`);
    }, time);
  });
}

Promise.any([fn(2000, true), fn(3000), fn(1000, true)]).then(
  (res) => {
    console.log(res); // 1秒后 输出  1000毫秒后成功
  },
  (err) => {
    console.log(err);
  }
);

// 当全都失败时
function fn(time, isResolve) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      isResolve
        ? resolve(`${time}毫秒后成功!!!`)
        : reject(`${time}毫秒后失败!!!`);
    }, time);
  });
}

Promise.any([fn(2000), fn(3000), fn(1000)]).then(
  (res) => {
    console.log(res);
  },
  (err) => {
    console.log(err); // 3秒后 报错 all Error
  }
);

2. 数字分隔符

数字分隔符可以让在定义长数字时,更加地一目了然

const num = 1000000000;

// 使用数字分隔符
const num = 1_000_000_000;

3. ||= 和 &&=

或等于(||=)   a ||= b 等同于 a || (a = b);
且等于(&&=)   a &&= b 等同于 a && (a = b);

4. 对象动态属性

经常碰到这样的问题,无论是在微信小程序还是 React 中,需要根据某个条件去修改某个数据

if (type === "boy") {
  this.setData({
    boyName: name,
  });
} else if (type === "girl") {
  this.setData({
    girlName: name,
  });
}

也不知道这个新特性叫啥,就取名叫属性动态属性

this.setData({
  [`${type}Name`]: name,
});