【问题标题】:How to use foreach and promise如何使用foreach和promise
【发布时间】:2020-07-30 10:47:13
【问题描述】:

我需要使用嵌套的 foreach 获取数据,但我无法填充我的数组。 在这段代码的末尾,我想有一个包含我的数据的数组(segId),但它是空的(因为异步)。 我读到我必须使用 Promise.all 但我不能因为我的承诺是嵌套的 我是初学者,所以我的代码远非完美 我该怎么做?

    async function getActivities(strava, accessToken)
{
  const payload = await strava.athlete.listActivities({'access_token':accessToken, 'after':'1595281514', 'per_page':'10'})
  return payload;
}
async function getActivity(strava, accessToken, id)
{
  const payload = await strava.activities.get({'access_token':accessToken, 'id':id, 'include_all_efforts':'true'})
  return payload;
}
async function getSegment(strava, accessToken, id)
{
  const payload = await strava.segments.get({'access_token':accessToken,'id':id})
  return payload
}

var tableau = []
var segId = []
const activities = getActivities(strava, accessToken)

activities.then(value => {
  value.forEach((element, index) => {
    const activity = getActivity(strava, accessToken, element['id'])
    activity.then(value => {
      value['segment_efforts'].forEach((element, index) => {
        const segment = getSegment(strava, accessToken, element['segment']['id'])
        segment.then(value => {
          segId.push(value['id'])
        })
        //console.log(segId)
      });
    });
  })
}) console.log(segId)

问候 PS:对不起我的英语......

【问题讨论】:

  • 与其发出大量请求,不如通过单个请求获取数据,然后遍历数据并填充表格。
  • 你好提姆。因为我使用 Strava API 获取数据。我无法通过 1 个请求获取所有数据。问候

标签: javascript foreach promise nested


【解决方案1】:

这样的事情应该可以工作。您需要始终返回内部承诺以将它们包含在您的承诺链中。考虑将代码拆分为函数以使其更具可读性。

getActivities(strava, accessToken).then(activities => {
    return Promise.all(activities.map(elem => {
        return getActivity(strava, accessToken, elem['id']).then(activity => {
            return Promise.all(activity['segment_efforts'].map(elem => {
                return getSegment(strava, accessToken, elem['segment']['id']).then(segment => {
                    segId.push(segment['id']);
                });
            }));
        })
    }));
})
.then(_ => {
    console.log(segId);
});

【讨论】:

  • 你好凯!!非常感谢 !!我的函数 getActivities、getActivity 和 getSegment 还不够吗?如何改善?问候
猜你喜欢
  • 2018-10-11
  • 2018-08-29
  • 2017-05-30
  • 1970-01-01
  • 2021-05-11
  • 2017-09-03
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多