node js03 /ES6之 async 和 await 关键字

作用

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表达式的运算结果

  1. await只出现在异步函数中
  2. await能停止代码执行 让后面的同步代码 先执行
  3. await后面跟随的是一个promise对象
  4. 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()

你可能感兴趣的:(es6,前端,javascript)