request.object.id 在 Cloud Code 的 afterSave() 中没有返回

request.object.id not returning in afterSave() in Cloud Code

Parse.Cloud.afterSave(function(request) {

var type = request.object.get("type");

  switch (type) {
    case 'inspiration':
      var query = new Parse.Query("Inspiration");
      break;
    case 'event':
      var query = new Parse.Query("Event");
      break;
    case 'idea':
      var query = new Parse.Query("Idea");
      break;
    case 'comment':
      break;
    default:
      return;
  }

  if (query) {
    query.equalTo("shares", request.object.id);
    query.first({
      success: function(result) {
        result.increment("sharesCount");
        result.save();
      },
      error: function(error) {
        throw "Could not save share count: " + error.message;
      }
    });
  }
 });

出于某种原因,request.object.id 没有从新创建的记录中返回对象 ID。我已经彻底测试了这段代码并将其隔离到 request.object.id 变量。我什至通过使用预先存在的对象 ID 成功 运行 它并且工作正常。我是否为对象 ID 使用了错误的变量?

在此先感谢您的帮助!

几周前遇到过这个问题。

原来是 Parse 最新的 Javascript SDK 中的错误。请查看您的 CloudCode 文件夹 - 它应该包含一个 global.json 文件,您可以在其中指定 JavaScript SDK 版本。默认情况下,它显示 "latest",将其更改为“1.4.2”并再次上传您的 CloudCode 文件夹。

如果您的云代码文件夹中缺少 global.json 文件,请查看 线程,我在其中描述了如何手动创建它。

感谢您的回复。我在 1.6.5 版中找到了另一个解决方法。我可能还应该提到,我对这段代码的用例是在将新关系添加到特定记录 (post) 时增加计数列(评论计数)。

我没有在我的关系 class(评论)上实现一个 afterSave 方法,而是在我的 class(Post)上实现了一个 beforeSave 方法并使用了 request.object.dirtyKeys () 获取我修改的列。从那里我检查我的脏键是否是评论,如果是我增加我的计数列。实际上效果很好。