解析云代码嵌套查询时未调用代码 141 成功/错误消息

Posted

技术标签:

【中文标题】解析云代码嵌套查询时未调用代码 141 成功/错误消息【英文标题】:Code 141 success/error message not called on parse cloud code nested query 【发布时间】:2014-08-29 08:43:12 【问题描述】:

我不断收到代码 141 错误成功/未调用错误。我正在运行另一个函数 getCinemasInLocation,它返回如下 JSON:result: [result1, result2]。我想遍历这个数组并在每次循环运行时运行一个查询,并将所有结果放到一个数组中。也就是说,所有迭代的结果都将放在一个数组中。我做得对吗?

//This function uses getCinemasInLocation to retrieve the movie objects that are showing in the cinemas
Parse.Cloud.define("getMovieIdsInCinemas", function(request, response) 
    var cinemasInLocaton = [];
    var theLocation = request.params.theLocation;
    cinemasInLocation = Parse.Cloud.run("getCinemasInLocation", theLocation: theLocation);
    for (i = 0; i < cinemasInLocation.length; i++)
        var query = new Parse.Query("showing");
        var movieIds = [];
        query.equalTo("cinema", 
            __type: "Pointer",
            className: "Cinema",
            objectId: cinemasInLocation[i]
        );
        query.find(
            success: function(results) 
                for (var i = 0; i < results.length; i++) 
                    movieIds.push(results[i].get("movie"));
                

            response.success(movieIds);
            ,
            error: function() 
                response.error("movie lookup failed 2");
            
        );
    
);

这是不起作用的 getCinemasInLocation

function getCinemasInLocation(theLocation) 
// some code
//var result = ["xiUXXYFhAl","Yanh9iDykk"];
//return result;

   var result = new Parse.Promise();
   var query = new Parse.Query("Cinema");
   query.equalTo("Location", theLocation);

    query.find(
        success: function(objects) 
            var cinemas = [];
            for (var i = 0; i < objects.length; i++) 
                var cinema = objects[i];
                cinemas.push(cinema.id);
            
            result.resolve(cinemas);
        ,
        error: function(error) 
            result.reject(error);
        
    );

return result;

【问题讨论】:

【参考方案1】:

    Parse.Cloud.run 不返回数组。它返回一个承诺。因此,在同一个文件中创建一个普通的 javascript 函数:getCinemasInLocation()

    正如@Delhi 所说,您只能调用 response.success() 或 response.error() 一次。所以,不要把它们放在一个循环中。

    并行使用 Promise。所以,让我们使用下划线循环而不是普通的 FOR 循环。您可以一次启动多个操作,并使用 Parse.Promise.when 创建一个新的 Promise,该 Promise 将在其所有输入 Promise 都被解决时被解决。您可以在文档中阅读更多相关信息:https://www.parse.com/docs/js_guide#promises-parallel

var _ = require('underscore');

function getCinemasInLocation(theLocation) 
    // some code
    var result = [id1, id2];
    return result;

// This function returns the array of movieIds of a cinema
function getMovieIdsInCinema(cinemaId) 
    var result = new Parse.Promise();
    var query = new Parse.Query("showing");
    query.equalTo("cinema", 
        __type: "Pointer",
        className: "Cinema",
        objectId: cinemaId
    );
    query.find(
        success: function(objects) 
            var movieIds = [];
            for (var i = 0; i < objects.length; i++) 
                var movie = objects[i].get("movie");
                movieIds.push(movie.id);
            
            result.resolve(movieIds);
        ,
        error: function(error) 
            result.reject(error);
        
    );
    return result;

Parse.Cloud.define("getMovieIdsInCinemas", function(request, response) 
    var cinemasInLocation = [];
    var theLocation = request.params.theLocation;
    cinemasInLocation = getCinemasInLocation(theLocation);

    var promises = [];
    _.each(cinemasInLocation, function(cinemaId) 
        promises.push(getMovieIdsInCinema(cinemaId));
    );

    Parse.Promise.when(promises).then(
        function() 
            var result = [];
            _.each(arguments, function(object) 
                result.push(object); // each object is an array of movieIds
            );
            response.success(result); // return array of arrays
        ,
        function(error) 
            response.error(error);
        
    );
);

【讨论】:

非常感谢。它工作得很好。我编辑了 getCinemasinLocation 函数以从数据库中检索电影院,然后它返回一个空数组。我将在上面发布编辑。我在这样做时复制了 getMovieIdsInCinema(),但它仍然不起作用

以上是关于解析云代码嵌套查询时未调用代码 141 成功/错误消息的主要内容,如果未能解决你的问题,请参考以下文章

Parse Cloud Code 嵌套查询上的代码 141(错误:未调用成功/错误)

解析服务器云代码查询语法错误 141

解析云代码查询不触发成功或错误

解析云代码给我代码:141 错误

AWS EC2 上的解析服务器在云代码上给出 141 错误

如何在解析服务器上创建和调用云代码函数?