作用
async和await 是用来处理异步的 你需要异步像同步一样执行 需要异步返回结果之后 在往下依据结果继续执行
async 是异步 的简写 , await
可以认为是 async wait
的简写。
async 用于申明一个 function 是异步的 await 用于等待一个异步方法执行完成
async
async function testAsync() {
return "hello async";
}
const result = testAsync();
console.log(result);
打印输出的是一个Pomise对象 async函数会返回一个 promise对象
在最外层不能用 await 获取其返回值的情况下 使用 then() 链来处理这个Promise对象
当 async
函数没有返回值时,返回 Promise.resolve(undefined)
testAsync().then(v => {
console.log(v); // 输出 hello async
});
await
await只能放在async函数内部使用
await用于一个异步操作之前 表示等待 这个异步操作的返回值
await 也可以用于一个同步的值
如果它等到的不是一个promise对象 那 await表达式的运算结果就是它等到的东西
如果他等到的是一个promise对象 await就会阻塞后面的代码 等着promise对象 resolve
然后得到 resolve的值 作为await表达式的运算结果
- await只出现在异步函数中
- await能停止代码执行 让后面的同步代码 先执行
- await后面跟随的是一个promise对象
- await返回的是 promise对象中的then( )中的回调函数中的参数
同步代码
const a = await 'hello world'
// 相当于
const a = await Promise.resolve('hello world');
// 所以直接写同步代码即可,不需要await关键字
const a = 'hello world';
异步代码
// 2s 之后返回双倍的值
function doubleAfter2seconds(num) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(2 * num)
}, 2000);
})
}
async function testResult () {
let result = await doubleAfter2seconds(30);
console.log(result);
}
testResult();
// 2s 之后,输出了60.
async/await 发送axios
import axios from 'axios';
async function play() {
const res = await axios({ url: 'http://xxx/xxxx/xxxx' })
console.log(res);
}
play()
async/await axios捕获服务器返回 回来错误
async function play() {
try {
const res = await axios({ url: 'http://xxx/xxx/xxxx' })
console.log(res.data);
} catch (err) {
console.dir(err.response.data.message);
}
}
play()