【发布时间】:2019-12-09 09:55:35
【问题描述】:
我需要您的帮助来调整我的方法以等待 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 响应。
【问题讨论】:
-
您的第一个
await只是在等待map函数的结果,该函数是同步的并立即返回。如果您想等待所有的承诺返回,请使用Promise.all。
标签: javascript node.js typescript asynchronous axios