我是 Javascript 新手,无法理解异步函数(特别是查询函数)。我下面有一个有效的查询,但需要将该查询的结果作为数组返回。
const allComedians = "Comedians";
let shows = ["Heat 1","Heat 2","Heat 3","Heat 4","Heat 5","Showcase 1","Showcase 2","Showcase 3"];
let showKeys = ["1","2","3","4","5","6","7","8"];
let ActiveComedians = [];
function initialize () {
for (let x = 0; x < shows.length; x++){
if (project.title === shows[x]){
wixData.query(allComedians).contains("showKey", showKeys[x])
.eq("isActive", true)
.find()
.then((results) => {
for (let i = 0; i < results.items.length; i++){
let add = results.items[i].title.trim();
ActiveComedians.push(add);
}
})
.catch((err) => {
console.log(err);
})
return ActiveComedians;
}
}
}
预先感谢您能够提供的任何说明。
上面的代码运行所需的查询并提供预期的结果,但我无法访问数组 ActiveComedians 的内容,因为直到脚本的所有其他部分执行后它才会返回。
在 JavaScript 中,异步函数不会立即返回。
当您的函数继续执行时,查询将继续在后台运行,导致 ActiveComedians 在填充之前被返回。
要解决此问题,您需要使用
.then()
等待查询完成。这是代码的简化版本:
const allComedians = "Comedians";
let shows = [
"Heat 1",
"Heat 2",
"Heat 3",
"Heat 4",
"Heat 5",
"Showcase 1",
"Showcase 2",
"Showcase 3",
];
let showKeys = ["1", "2", "3", "4", "5", "6", "7", "8"];
let ActiveComedians = [];
function initialize() {
for (let x = 0; x < shows.length; x++) {
if (project.title === shows[x]) {
return wixData
.query(allComedians)
.contains("showKey", showKeys[x])
.eq("isActive", true)
.find()
.then((results) => {
for (let i = 0; i < results.items.length; i++) {
let add = results.items[i].title.trim();
ActiveComedians.push(add);
}
return ActiveComedians; // Return after query finishes
})
.catch((err) => {
console.log(err);
});
}
}
}