将 afterSave 与 Parse Cloud 代码一起使用

Posted

技术标签:

【中文标题】将 afterSave 与 Parse Cloud 代码一起使用【英文标题】:Using afterSave with Parse Cloud Code 【发布时间】:2015-07-03 23:58:02 【问题描述】:

我在学习 Cloud Code 的第 3 天,进展甚微。我对呼叫过程的工作方式感到困惑。在 Cloud Code 中,我需要使用 afterSave 来查询一个类,其中键“sent”等于 false,并且对于接收者数组中的每个接收者,向每个接收者推送一个通知并将“发送”设置为 true。

我在 main.js 中保存了 afterSave 函数,但每次我使用 PFCloud.callFunctionInBackground() 调用它时都会得到 [Error]: function not found (Code: 141, Version: 1.7.2)

这是我的 afterSave 触发器:

Parse.Cloud.afterSave("Send", function(request) 
  query = new Parse.Query("Shares");
  query.get(request.object.get("share").id, 
    success: function(post) 
      console.success("Howdy");
    ,
    error: function(error) 
      console.error("Got an error " + error.code + " : " + error.message);
    
  );
);

我在这里用 Swift 调用函数:

PFCloud.callFunctionInBackground("Send", withParameters: nil) 
            (response: AnyObject?, error: NSError?) -> Void in
            let result = response as? String
            println(result)

        

如果我在 saveInBackgroundWithBlock 闭包内调用 afterSave 触发器,是否使用 PFCloud.callFunctionInBackground 调用它?

【问题讨论】:

【参考方案1】:

我认为afterSave 正在做一些与你想象的不同的事情——当你保存一个对象时它会自动触发。在这种情况下,如果您有一个Send 类型的对象,并且您更新了该对象并保存了它,您的afterSave 函数将被调用。例如,这对于验证保存的对象是否有效或更新相关对象通常很有用。

我觉得您可以使用Cloud Function 完成您想做的事情。您可以从您的 Swift 代码中调用它,它是一个独特的命名函数,而不是一个自动调用的函数。

【讨论】:

是否在保存任何对象或特别是类对象后调用 afterSave 触发器?似乎触发器和函数之间的唯一区别实际上是必须在我的代码中调用它,不是吗? @dperk 当您保存指定类型的对象时,它们会被调用。在您的示例中,当保存“发送”类型的内容时,将触发您的 afterSave。当你定义一个触发器时,你用字符串指定它对应的类。然后在保存该类型的对象时触发它。您可以随时(基本上在任何地方)调用云函数,它们不对应于类。

以上是关于将 afterSave 与 Parse Cloud 代码一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何从 afterSave 函数中获取解析用户

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

使用 Parse.Could.AfterSave 将关系添加到 ParseObject

Parse.com 云代码 afterSave() 错误:“未捕获尝试使用指向新的未保存对象的指针保存对象。”

无法在 Parse 中保存自定义类对象

从Parse.com删除特定对象