微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

async、await和Promise对比

1. 先看看用 Promise 操作一个异步编程

// ES6 promise 方法
let p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('我是p1')
  }, 1000)
})

let p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('我是p2')
  }, 200)
})

let p3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('我是p3')
  }, 200)
})

// 想让p1完成后, 再执行P2, 再执行P3
p1.then(res => {
  console.log(res)
  p2.then(res => {
    console.log(res)
    p3.then(res => {
      console.log(res)
    })
  })
})

/* 要么如下
p1.then(res => {
  console.log(res)
  return p2
})
  .then(res => {
    console.log(res)
    return p3
  })
  .then(res => {
    console.log(res)
  })
*/

2. 再看看用 async 和 await

// 使用 ES7 async  await语法糖
let a1 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('我是a1')
    }, 2000)
  })
}
let a2 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('我是a2')
    }, 40)
  })
}
let a3 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('我是a3')
    }, 40)
  })
}

// 想让a1完成后再执行a2再执行a3
// 看起来更优雅,像同步一样
async function asy() {
  await a1().then(res => {
    console.log(res)
  })
  await a2().then(res => {
    console.log(res)
  })
  await a3().then(res => {
    console.log(res)
  })
}
asy()

3. 区别

自家看区别,谁更优雅!

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐