javascript - 如何在循环结束时返回数组(新手问题)
问题描述
下面的代码(为了清楚起见,我已经简化了)循环并在循环的每个部分完成之前返回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
}
解决方案
你应该用promise .then 包裹循环,或者你正在使用异步它的意思是数组的第一个项目将被打印,然后它将等待
getDataFunctionWhichReturnsAPromise()
.then(async (card) => {
for (let cardToGet of cardsToGet) {
writeCard = await buildingCard(card)
cardsToInsert.push(writeCard)}
}
推荐阅读
- alexa - AutoPage Alexa 技能 APL
- excel - Excel VBA 计算文件夹和子文件夹中所有文件的行数
- java - Django rest不从java返回json(已解决)
- javascript - Puppeteer - 连接到正在运行的浏览器时防止重新加载
- java - 如何确保两个动作永远不会被不同的线程同时执行?
- r - R:给定环境中的唯一对象名称
- vue.js - v-dialog 实例生成两次 – Vuetify
- r - 如何在每列中选择最高值并在 R 中打印行名?
- c++ - 将 shared_ptr 用于 private_key 时出现分段错误
- reactjs - 动态数据未在浏览器上呈现