首页 > 解决方案 > 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)
    })
  }));
}

标签: javascriptnode.jsasync-awaitpromise

解决方案


您需要回调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)
    })
  }));
}

推荐阅读