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" 对此表达式的类型没有影响。”