我不知道问题所在。它不断返回一个空数组。也就是说,movieIds总是空的。
function getMoviesInCinema(theCinema){
var cinema = theCinema;
var query = new Parse.Query("showing");
var movieIds = [];
query.equalTo("cinema", {
__type: "Pointer",
className: "Cinema",
objectId: cinema
});
query.find().then(function(results) {
if(results.length > 0){
for (var i = 0; i < results.length; i++) {
movieIds.push(results[i].get("movie"));
}
}
else{
console.log("Could be an error");
}
});
return movieIds;
}
答案 0 :(得分:2)
那是因为从函数返回时查询还没有完成。你应该让你的函数接受回调:
function getMoviesInCinema(theCinema, callback){
var cinema = theCinema;
var query = new Parse.Query("showing");
query.equalTo("cinema", {
__type: "Pointer",
className: "Cinema",
objectId: cinema
});
query.find().then(function(results) {
if(results.length > 0){
callback(results);
}
else{
console.log("Could be an error");
}
});
}
然后这样称呼它:
getMoviesInCinema(theCinema, function(movieIds) {
console.log(movieIds);
});
答案 1 :(得分:0)
此处的问题是query.find()
异步运行 。这意味着您的getMoviesInCinema
函数会在query.find
调用then
回调之前返回。
由于query.find
是异步的,因此您的函数无法直接返回ID。 (它可以返回数组,但是数组将以空的方式开始。)相反,它还应该提供Promise或允许回调。
不确定你正在使用什么Promises lib,所以这里是使用回调的选项:
function getMoviesInCinema(theCinema, callback){
// Receive the callback --------------^
var cinema = theCinema;
var query = new Parse.Query("showing");
var movieIds = [];
query.equalTo("cinema", {
__type: "Pointer",
className: "Cinema",
objectId: cinema
});
query.find().then(function(results) {
if(results.length > 0){
for (var i = 0; i < results.length; i++) {
movieIds.push(results[i].get("movie"));
}
}
else{
console.log("Could be an error");
}
if (callback) { // <=====
callback(movieIds); // <===== Call it
} // <=====
});
}
用法:
getMoviesInCinema(42, function(movieIds) {
// Use movieIds here
});
答案 2 :(得分:-3)
而不是使用
movieIds.push(results[i].get("movie"));
尝试使用
movieIds.add(results[i].get("movie"));
它可能会解决您的问题。