-1

我不知道问题是什么。它不断返回一个空数组。也就是说,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;

}
4

3 回答 3

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);

});
于 2014-08-30T09:13:03.820 回答
0

这里的问题是异步query.find()运行。这意味着您的函数在调用您的回调之前返回。getMoviesInCinemaquery.findthen

因为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
});
于 2014-08-30T09:14:43.247 回答
-3

而不是使用

movieIds.push(results[i].get("movie"));

尝试使用

movieIds.add(results[i].get("movie"));

它可能会解决您的问题。

于 2014-08-30T09:12:05.070 回答