无法从javascript函数获取返回值

时间:2014-08-30 09:08:56

标签: javascript arrays parse-platform cloud-code

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

}

3 个答案:

答案 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"));

它可能会解决您的问题。