我想执行一系列getData函数,但前提是要获取数据。然后,我需要将所有结果编译为成对的值数组以返回。
以下代码有效,但我需要对另外7个“if(card.x)...”做类似的处理
有什么更好的方法呢?
async function buildingCard(card) {
let cardToCreate = []
try {
if (card.joke1) {
// wixData.get returns a promise
let joke = await wixData.get("jokes", card.joke1).then((results) => {
cardToCreate.push({ "titleText1": results.title })
})
}
if (card.quote1) {
let quote = await wixData.get("quotes", card.quote1).then((results) => {
cardToCreate.push({ "fancyText1": results.title })
})
}
return cardToCreate
} catch (error) {
console.log("buildcard error: " + error);
return error;
}
}
最佳答案
您在这里有三件事有所不同:
get
您可以使用这些对象的值定义对象的数组,如下所示:
let props = [
{name: "joke1", key: "jokes", resultKey: "titleText1"},
{name: "quote1", key: "quotes", resultKey: "fancyText1"},
// ...
];
然后,如果要并行查询,则可以使用
Promise.all
等待多个promise生效,然后从结果数组中推送条目:async function buildingCard(card) {
// Define the stuff you'll do
let props = [
{name: "joke1", key: "jokes", resultKey: "titleText1"},
{name: "quote1", key: "quotes", resultKey: "fancyText1"},
// ...
];
let cardToCreate = [];
try {
return Promise.all(props
// Only the ones with values
.filter(({name}) => card[name])
// Map to the object to push
.map(
({name, key, resultKey}) =>
wixData.get(key).then(results => ({[resultKey]: results}))
)
);
} catch (error) {
console.log("buildcard error: " + error);
return error;
}
}
如果您想一次打一个电话,可以改用
for-of
循环:async function buildingCard(card) {
// Define the stuff you'll do
let props = [
{name: "joke1", key: "jokes", resultKey: "titleText1"},
{name: "quote1", key: "quotes", resultKey: "fancyText1"},
// ...
];
try {
let cardToCreate = [];
for (const {name, key, resultKey} of props) {
if (card[name]) {
const results = await wixData.get(key);
cardToCreate.push({[resultKey]: results});
}
}
return cardToCreate;
} catch (error) {
console.log("buildcard error: " + error);
return error;
}
}
关于javascript - 调用promise API时如何有效地聚合数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61544316/