Skip to content

三、ES8

22.Object.values

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

javascript
const obj = {
  name: 'zk',
  age: 22,
  gender: '男'
}

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

23.Object.entries

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

javascript
const obj = {
  name: 'zk',
  age: 22,
  gender: '男'
}

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

24.async/await

以同步方式执行异步操作

我们平时可能会遇到这种场景,接口一,请求到数据一,而数据一被当做请求二的参数去请求数据二,我们会用Promise这么做

javascript
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
javascript
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()