为何函数返回前不等待API响应?如何让函数等待响应后再返回?
解决天气API函数无法正确返回响应的问题
你的weather函数当前无法返回API响应的核心原因是:函数没有返回axios.get()生成的Promise对象,then回调里的return result只是回调函数的返回值,不会作为外层函数的返回结果,因此调用await weather()时拿到的是undefined。
以下是两种可行的修改方案:
方案一:直接返回axios请求的Promise
修改weather-api.js代码:
export default () => { const link = "http://api.openweathermap.org/data/2.5/weather?q=istanbul&lang=tr&units=metric&APPID=9e0e8bbf1392be5b8b8ae9d453645ff8"; // 返回axios.get创建的Promise,让外部await可以获取结果 return axios.get(link).then( (response) => { return response.data; }, (error) => { console.log(error); // 抛出错误,方便调用方捕获并处理异常 throw error; } ); }
方案二:用async/await改写,代码更直观
修改weather-api.js代码:
export default async () => { const link = "http://api.openweathermap.org/data/2.5/weather?q=istanbul&lang=tr&units=metric&APPID=9e0e8bbf1392be5b8b8ae9d453645ff8"; try { const response = await axios.get(link); return response.data; } catch (error) { console.log(error); throw error; // 抛出错误,让调用方可以处理异常 } }
调用代码保持不变即可,但要注意:调用await weather()的代码必须处于async函数内部,否则会触发语法错误。
内容的提问来源于stack exchange,提问作者Ziawen
相关产品推荐
相关产品推荐

