解析云代码嵌套查询时未调用代码 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 成功/错误消息的主要内容,如果未能解决你的问题,请参考以下文章