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

Posted

技术标签:

【中文标题】Parse Cloud Code 嵌套查询上的代码 141(错误:未调用成功/错误)【英文标题】:Code 141 (error: success/error was not called) on Parse Cloud Code nested queries 【发布时间】:2016-01-14 17:37:18 【问题描述】:

背景:

我有一个 Parse 图像数据库。简单地说,我的代码就是这样做的:

用户通过 Parse Cloud 调用请求图像(“getNewPicture”)。嵌套在我检查他之前是否看过任何图片(以及其他要求),如果有,则提供一张特定的图片(getSpecifiedPicture)。如果他还没有,那么我提供一张新图片(getNewPicture)。

问题:

通过 Parse Cloud Code 函数调用“getNewPicture”我得到一个错误代码 141。奇怪的是它可以在 android 上运行,而不是在 ios 上运行。

我的代码:

Parse.Cloud.define("getNewPicture", function(request, response) 
  var SeenPictures = Parse.Object.extend("SeenPictures");
  var query = new Parse.Query(SeenPictures);
  var username = request.params.username;
  var notWantedPics = [];
  query.ascending("createdAt");
  query.equalTo("username", username);
  query.find(
    success: function(results) 
      for (var i = 0; i < results.length; i++) 
        if (results[i].get("likes") == 1 || results[i].get("dislikes") == 1) 
          notWantedPics.push(results[i].get("pictureId"));
          results.splice(i, 1);
          i--;
        
      
      if (results != 0) 
        getSpecifiedPicture(results[0].get("pictureId"), 
          success: function(returnValue) 
            response.success(returnValue);
          ,
          error: function(error) 
            response.error(error);
          
        );
       else 
        getNewPicture(username, notWantedPics, 
          success: function(returnValue) 
            response.success(returnValue);
          ,
          error: function(error) 
            response.error(error);
          
        );  
      
    ,
    error: function() 
      response.error(error);
    
  );
);

function getSpecifiedPicture(specifiedPic, callback) 
  var Pictures = Parse.Object.extend("Pictures");
  var pictures = new Parse.Query(Pictures);
  pictures.get(specifiedPic, 
    success: function(picture) 
      callback.success(picture);
    ,
    error: function(error) 
      callback.error(error);
    
  );


function getNewPicture(username, notWantedPics, callback) 
  var Pictures = Parse.Object.extend("Pictures");
  var pictures = new Parse.Query(Pictures);
  pictures.notEqualTo("photographerUserName", username);
  pictures.notContainedIn("objectId", notWantedPics);
  pictures.ascending("createdAt");
  pictures.find(
    success: function(results) 
      if (results.length > 0) 
        var object = results[0];
        //Some other fancy stuff
        object.save();
        callback.success(object);
      
    ,
    error: function(error) 
      callback.error(error);
    
  );

为什么我收到代码 141?任何帮助表示赞赏。

谢谢。

【问题讨论】:

【参考方案1】:

你的回调是一团糟。我重写了它以遵循更多的承诺链风格。更容易遵循。此外,underscore.js 是你的朋友。希望我的想法是对的。

var _ = require('underscore'); // javascript Library

Parse.Cloud.define("getNewPicture", function(request, response) 

    var username = request.params.username;
    var notWantedPics = [];

    if (!username) 
        return response.error('No username.');
    

    var query1 = new Parse.Query("SeenPictures");
    query1.ascending("createdAt");
    query1.equalTo("username", username);
    var SeenPictures = query1.find();

    return Parse.Promise.when([SeenPictures]).then(function (SeenPictures) 

        SeenPictures = _.filter(SeenPictures, function (SeenPicture) 
            if (SeenPicture.get("likes") == 1 || SeenPicture.get("dislikes") == 1) 
                notWantedPics.push(SeenPicture.get("pictureId"));
                return false;
             
            else 
                return true;
            
        );

        // notWantedPics?

        if (SeenPictures > 0) 
            var query2 = new Parse.Query("Pictures");
            var Pictures = [query2.get(SeenPictures[0].get('pictureId'))];
         
        else 
            var query2 = new Parse.Query("Pictures");
            query2.notEqualTo("photographerUserName", username);
            query2.notContainedIn("objectId", notWantedPics);
            query2.ascending("createdAt");
            var Pictures = query2.find();
        

        return Parse.Promise.when([Pictures]);

    ).then(function (Pictures) 

        if (Pictures > 0) 

            // Success
            return response.success(Pictures[0]);

         else 
            return Parse.Promise.error("No pictures.");
        

    , function (error) 
        // Error
        return response.error(error);
    );

);

【讨论】:

没问题!顺便说一句,来自渥太华的嗨!

以上是关于Parse Cloud Code 嵌套查询上的代码 141(错误:未调用成功/错误)的主要内容,如果未能解决你的问题,请参考以下文章

解析 Cloud Code 关系查询语法

如何将 Parse Cloud Code 中的值返回到我的 iOS 应用程序?

使用 Parse Code Cloud Javascript 函数更改 Parse 列的值

未能通过 Mandril & Parse-Cloud-Code 发送超过 9 封电子邮件

删除 Parse Cloud Code 中的其他文件

将 Parse Cloud Code 与 Parse Server Heroku 一起使用