async/await

todo

参考:https://segmentfault.com/a/1190000013292562?utm_source=channel-newest

一些关于async/await的见解(1):

参考:https://segmentfault.com/a/1190000015488033

1,async/await实际上是Generator的语法糖

2,async/await一般与promise配合使用

3,try...catch...

4,小案例:

function sayHi(name) {
  return new Promise((resolved, rejected) => {
    setTimeout(() => {
      resolved(name);
    }, 2000)
  })
}

async function sayHi_async(name) {
  const sayHi_1 = await sayHi(name)
  console.log(`你好, ${sayHi_1}`)
  const sayHi_2 = await sayHi('李四')
  console.log(`你好, ${sayHi_2}`)
  const sayHi_3 = await sayHi('王二麻子')
  console.log(`你好, ${sayHi_3}`)
}

sayHi_async('张三')
// 你好, 张三
// 你好, 李四
// 你好, 王二麻子

一些关于async/await的见解(2):

1,async function定义异步函数,await不能单独使用

2,await后面必须跟promise对象,会等promise对象执行完毕,并返回其返回值,但是会将后面的代码放入事件队列,如下

async function f() {
    let promise = new Promise((resolve, reject) => {
        setTimeout(() => resolve('done!'), 1000)
    })
    let result = await promise // 直到promise返回一个resolve值(*)
    alert(result) // 'done!' 
}
f()

3,async function返回值总是一个promise对象,如下:

async function f() {
    return 1
}
f().then(alert) // 1

  也可以显式返回一个promise对象,如下:

async function f() {
    return Promise.resolve(1)
}
f().then(alert) // 1

4,await字面上使得JavaScript等待,直到promise处理完成,然后将结果继续下去。这并不会花费任何的cpu资源,因为引擎能够同时做其他工作:执行其他脚本,处理事件等等。

其实这就是jobs(微任务队列的骚操作)

原文地址:https://www.cnblogs.com/wangtong111/p/11278227.html