javascript - promise.all() 不返回值
问题描述
我想获取用户数据。
使用 axios 从 api 获取的来自 'getUserData(encodeURI(userId)).then((userData) => {...}' 的用户数据值没有问题
但是函数 return await Promise.all(someList.map(...)) 它是 return [undefined, undefined, ...]
为什么等待 promise.all 返回未定义的数组?
代码
app.use("/userinfo", (req, res) => res.json(getUsersData()));
async function getUserData(userId) {
return await axios.get(`https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/${userId}?api_key=${riotApiKey}`)
};
async function getUsersData() {
return await Promise.all(summonersId.map((userId, index) => {
getUserData(encodeURI(userId)).then((userData) => {
if (userData.status === 404) {
throw new Error('no user')
}
console.log(userData.data)
return {
index: index,
id: userData.id,
name: userData.name
}
}).catch((err) => {
console.log('err', err.code)
})
}));
}
解决方案
您需要回调return
中使用的承诺:map
async function getUsersData() {
return await Promise.all(summonersId.map((userId, index) => {
// HERE: see "return" below
return getUserData(encodeURI(userId)).then((userData) => {
if (userData.status === 404) {
throw new Error('no user')
}
console.log(userData.data)
return {
index: index,
id: userData.id,
name: userData.name
}
}).catch((err) => {
console.log('err', err.code)
})
}));
}
推荐阅读
- python-3.x - 仅在数据框列中保留字符串
- jenkins - 如何在管道的后期部分定义变量?
- python - 白色背景的opencv(python)中是否有任何边缘检测?
- azure-data-explorer - 仅当存在时如何在 Kusto 中删除外部表
- cypress - 赛普拉斯在某些情况下得到错误的字段
- laravel - 带有两个提交按钮的表单 laravel 6
- python - Matplotlib 绘制多条线不起作用
- batch-file - Cmd 复制文件名长度超过 3 个字符的文件
- tensorflow - 如何将后处理添加到 Tensorflow 模型中?
- javascript - 如何通过JS更改div上的数据值