es8

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

1. Object.values

可以用来获取对象的 value 的集合

const obj = {
  name: "柯基",
  age: 22,
  gender: "男",
};

const values = Object.values(obj);
console.log(values); // [ '柯基', 22, '男' ]

2. Object.entries

可以用来获取对象的键值对集合

const obj = {
  name: "柯基",
  age: 22,
  gender: "男",
};

const entries = Object.entries(obj);
console.log(entries);
// [ [ 'name', '柯基' ], [ 'age', 22 ], [ 'gender', '男' ] ]

3. async/await

理解就是:以同步方式执行异步操作
平时可能会遇到这种场景,接口一,请求到数据一,而数据一被当做请求二的参数去请求数据二,会用 Promise 这么做

function fn() {
  // 模拟第一次请求
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(5);
    }, 1000);
  }).then((res) => {
    // 模拟第二次请求
    new Promise((resolve, reject) => {
      setTimeout(() => {
        // 拿第一次请求的数据去乘10,当做第二次请求的数据
        resolve(res * 10);
      }, 2000);
    }).then((sres) => {
      console.log(sres);
    });
  });
}
fn(); // 1 + 2 = 3 3秒后输出 50

这样的嵌套是不美观的,如果有很多个接口,那就会嵌套很多层,此时可以使用 async/await 来以同步方式执行异步,注意以下几点:
await 只能在 async 函数里使用
await 后面最好接 Promise,如果后面接的是普通函数则会直接执行
async 函数返回的是一个 Promise

function fn1() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(5);
    }, 1000);
  });
}

function fn2(data) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(data * 10);
    }, 2000);
  });
}

async function req() {
  // 同步方式执行异步,像排队一样
  const data1 = await fn1(); // 等待1秒后返回数据再往下执行
  const data2 = await fn2(data1); // 拿data1去请求2秒后,往下走
  console.log(data2); // 总共3秒后 输出 50
}
req();