浅谈async原理?
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
提到 async 就必须要提 Generator 了,因为 async 函数是 Generator 函数的语法糖,将 Generator 的星号换成 async 将 yield 换成 await。
- Generator 是一个函数,可以在函数内部通过 yield 返回一个值(此时,Generator 函数的执行会暂定,直到下次触发.next())
- 创建一个 Generator 函数的方法是在 function 关键字后添加*标识。
- 在调用一个 Generator 函数后,并不会立即执行其中的代码,函数会返回一个 Generator 对象,通过调用对象的 next 函数,可以获得 yield/return 的返回值。
- 无论是触发了 yield 还是 return,next()函数总会返回一个带有 value 和 done 属性的对象。value 为返回值,done 则是一个 Boolean 对象,用来标识 Generator 是否还能继续提供返回值。
Generator 基本使用
const getUserName=()=>{
return "我叫hyx"
}
const getUserAge=()=>{
return 18
}
function* getUserInfo(){
yield getUserName()
yield getUserAge()
}
const info = getUserInfo();
console.log(info.next().value); // 我叫hyx
console.log(info.next().value); // 18
async 原理
- 1.相比起 Generator,async 和 await 语义更清晰
- 2.await 必须在 async 函数里使用,不能单独使用;
- 3.await 后面需要跟 Promise 对象,不然就没有意义
- 4.await 它会暂停原异步函数的执行,并等待右侧 Promise 返回结果
- 5.async 默认返回一个 Promise 函数
const getUserInfo=async ()=> {
return "我叫hyx"
}
getUserInfo()