首页 > 解决方案 > 如何在循环结束时返回数组(新手问题)

问题描述

下面的代码(为了清楚起见,我已经简化了)循环并在循环的每个部分完成之前返回cardsToInsert,因此无法正确构建数组。

循环正确地构建了数组,但结果在开始时返回,而不是在构建之后。

如何让它在返回数组之前完成所有循环?

async function loopCards(cardsToGet) {
  for (let cardToGet of cardsToGet) {
    getDataFunctionWhichReturnsAPromise()
       .then(async (card) => {
          writeCard = await buildingCard(card)
    cardsToInsert.push(writeCard)
  }
  return cardsToInsert
}

谢谢

按要求添加完整代码

// wixData.get() 返回一个承诺

async function loopCards(cardsToGet) {
    let writeCard
    let buildCard
        for (let index = 0; index < cardsToGet.length; index++) {
            const cardToGet = cardsToGet[index].card
            buildCard =  wixData.get("Card", cardToGet)
                .then(async (card) => {
                    writeCard = await buildingCard(card)
                    cardsToInsert.push(writeCard)
                    }
                )
                .catch((err) => {
                    let errorMsg = err;
                    console.log("getcard error: " + errorMsg);
                    return errorMsg
                }); 
        }
        return cardsToInsert
}

标签: javascriptloops

解决方案


你应该用promise .then 包裹循环,或者你正在使用异步它的意思是数组的第一个项目将被打印,然后它将等待

getDataFunctionWhichReturnsAPromise()
       .then(async (card) => {
  for (let cardToGet of cardsToGet) {
          writeCard = await buildingCard(card)
    cardsToInsert.push(writeCard)}
  }

推荐阅读