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(微任务队列的骚操作)