写法
// 函数声明
async function foo() {}
// 函数表达式
const foo = async function () {};
// 对象的方法
let obj = { async foo() {} };
obj.foo().then(...)
// Class 的方法
class Storage {
constructor() {
this.cachePromise = caches.open('avatars');
}
async getAvatar(name) {
const cache = await this.cachePromise;
return cache.match(`/avatars/${name}.jpg`);
}
}
const storage = new Storage();
storage.getAvatar('jake').then(…);
// 箭头函数
const foo = async () => {};
使用方式
async function asyncF() {
let a = await 1
console.log(a);
let b = await 2;
console.log(b);
return a + b;
}
asyncF().then(res => {
console.log('res', res);
})
// 1
// 2
// res 3
async函数相当于Generator函数+执行器,async函数不需要手动去移动指针,也无法进行干预执行过程。async函数返回的是一个Promise对象,可以通过then方法获取async 函数的返回值,同时也可以使用catch方法捕获错误。
执行方式
console.log('Hi async')
async function asyncF(params) {
console.log('Hello');
let b = await 2 + 1;
console.log('b is:', b);
let a = await new Promise(function(solve, ject) {
setTimeout(() => {
solve(params)
})
})
console.log('a is:', a);
return a
}
asyncF('我是a')
console.log('Bay async')
// Hi async
// Hello
// Bay async
// b is: 3
// a is: 我是a
async函数调用就会执行,但是遇到await就会放入异步线程去执行,所以即使b是同步的数据,但是一样在Bay async后面打印出来。