javascript - 如何使用 Axios 和 Typescript 等待响应?
问题描述
我需要您的帮助来调整我的方法以等待 axios 响应。基本上,我向 WebService 发送请求,我需要等待响应以捕获返回并调用另一个方法。
我尝试在通话中使用 async/await,但我可能用错了。
class PlaylistController {
// Metodo inicial para criacao da playlist
public async create(req: Request, res: Response): Promise<Response> {
let artists = req.body.bands;
artists = artists.split(',');
const search = await Object.values(artists)
.map((artistsName): Promise<AxiosResponse> => this.searchArtists(artistsName));
console.log(search);
}
private searchArtists = async (artistName): Promise<AxiosResponse> => axios.get(`${API_URL}/search`, {
params: {
q: artistName,
type: 'artist',
},
headers: {
Authorization: `${TOKEN_TYPE} ${REFRESH_TOKEN}`,
},
}).then((response): AxiosResponse => { console.log(response.data.artists); return response; })
.catch((error) => { console.log(error.response.data); return error; });
}
此代码首先记录“console.log(search);”的结果 使用此输出:
[Promise { pending },
Promise { pending },
Promise { pending } ]
之后显示 axios 响应。
解决方案
您的“创建”函数没有返回一个承诺,它是一个 void 返回类型的函数。此外,您需要在“ Axios ”等异步任务之前添加等待。Object.values 不是异步任务。
class PlaylistController {
// Metodo inicial para criacao da playlist
public create(req: Request, res: Response): void {
let artists = req.body.bands;
artists = artists.split(',');
search = Object.values(artists).map((artistsName): any => this.searchArtists(artistsName));
console.log(search)
}
private searchArtists = async (artistName): Promise<AxiosResponse> => {
return await axios.get(`${API_URL}/search`, {
params: {
q: artistName,
type: 'artist',
},
headers: {
Authorization: `${TOKEN_TYPE} ${REFRESH_TOKEN}`,
}
})
}
}
推荐阅读
- python - Pandas DataFrame:将字符串列转换为列表列
- regex - 在 oracle 中提取日期以及上午或下午
- reporting-services - 打开网址时SSRS空白页面
- python-2.7 - Kivy:从脚本打开一个弹出窗口
- php - PHP Unittest class that loads another class
- java - 每次启动应用程序时创建的 Spring 批处理作业实例
- haskell - 在 Haskell IO() 主函数中返回值
- jenkins - kubectl apply 来自服务器的错误(禁止)需要身份验证 - Jenkins
- javascript - NodeJS 快速获取请求在移动设备上不起作用
- python - Python:将列表传递给另一个列表但列表为空