async和await 异步处理
async
1. 它作为一个关键字放在函数前面,用于表示函数是一个异步函数。
2. 返回的是一个promise对象,如果想要获取到promise的值,就要使用then()方法
3. 不可直接使用函数名() 这样的形式调用异步函数,如果要这样使用,需要放在新定义的异步函数体内去调用
created(){ this.data().then(reslove => { console.log(reslove); // 4 }) }, medthos(){ async data() { return 1 + 3 }, }
如果函数内部抛出错误,promise对象有个catch方法进行捕获。
await
await关键字要在ansyc函数里面
1. await修饰的如果是promise对象,可以获取到promise中返回的内容(resolve和reject参数),且取到值后语句才会往下执行
2. 如果不是promise对象,把这个非promise的东西当作await表达式的结果
created() { this.getA() // 调用 }, methods: { async getA() { let res = await this.getData() console.log('111'); return res }, getData() { return new Promise(res => { setTimeout(() => { res(console.log(2222)) }, 5000) }) } } // 结果 // 222 // 111
await可能失效的两个原因
- await后面需要跟一个promise函数或者async函数(async就是promise的语法糖)。他实质上是帮你获取resolve里面的数据。
- 你多层嵌套使用await的时候少写了一个await