使用async、await实现axios请求网络时的同步执行代码

0. 新建js文件 demo.js(编译器:vscode)

axios 的基础使用:

1. 引入 axios: const axios = require('axios'); 

2. 测试用接口(来自黑马课程,查询到的是假数据):

var weatherList;
//
node.js不支持中文,直接写"city=北京"报错:Request path contains unescaped characters var url = "http://wthrcdn.etouch.cn/weather_mini?city=" + encodeURI("北京");

3. 使用 axios 请求:

axios.get(url).then((res) => {
    weatherList = res.data.data;
    console.log({ weatherList });
}).catch(err => {
    console.log({ err });
});

不使用 async、await时:

function searchWeather() {
    return axios.get(url).then((res) => {
        weatherList = res.data.data;
        console.log({ weatherList });
    }).catch(err => {
        console.log({ err });
    });
}
function run() {
    console.log("我将要进行网络请求");
    searchWeather();
    console.log("我已经网络请求过了");
}

run();

运行结果:

 使用 async、await关键字时:

function searchWeather() {
    return axios.get(url).then((res) => {
        weatherList = res.data.data;
        console.log({ weatherList });
    }).catch(err => {
        console.log({ err });
    });
}
async function run() {
    console.log("我将要进行网络请求");
    await searchWeather();
    console.log("我已经网络请求过了");
}

run();

运行结果:

也可以直接写:

async function run() {
    console.log("我将要进行网络请求");

    await axios.get(url).then((res) => {
        weatherList = res.data.data;
        console.log({ weatherList });
    }).catch(err => {
        console.log({ err });
    });
    
    console.log("我已经网络请求过了");
}

run();

注意:

[1] 语句用 await 修饰时,方法一定要用 async 修饰;

[2] axios 网络请求在单独的方法中时,一定要 return axios.get().then();因为 axios 返回一个 promise,此时 await 修饰才有意义。如果没有 return,vscode 将提示 “"await" 对此表达式的类型没有影响。”

 

posted @ 2022-06-30 17:03  sunshine233  阅读(744)  评论(2编辑  收藏  举报