解析 Javascript API 云代码 afterSave 并访问 beforeSave 值

Posted

技术标签:

【中文标题】解析 Javascript API 云代码 afterSave 并访问 beforeSave 值【英文标题】:Parse Javascript API Cloud Code afterSave with access to beforeSave values 【发布时间】:2015-05-13 06:20:59 【问题描述】:

我正在使用 Parse Cloud Code 进行保存前/保存后处理。我会检查 afterSave 钩子中某个属性的 beforeSave 值——例如,当parseObj.get('status')processing => complete 转换时做一些事情。我可以访问oldVal/newVal 以在beforeSave 处理程序中更改属性,但是我找不到将oldVal 传递给afterSave 处理程序而不保存为数据库字段的方法。

我试图将值作为属性传递给responseresponse.object 对象,但都没有传递给afterSave

Parse.Cloud.beforeSave('ParseObj', function(request, response) 
  var checkDirty, isDirty, parseObj, prevQ;
  // request keys=["object","installationId","user","master"]
  if (request.object.isNew()) 
    return response.success();
   else 
    parseObj = request.object;
    checkDirty = ['status']; // array of all attrs to check
    isDirty = [];
    _.each(checkDirty, function(attr) 
      if (parseObj.dirty(attr)) 
        isDirty.push(attr);
      
    );
    console.log("isDirty=" + JSON.stringify(isDirty));
    if (isDirty.length) 
      prevQ = new Parse.Query('ParseObj');
      return prevQ.get(parseObj.id).then(function(prevParseObj) 
        var newVal, oldVal;
        console.log("prevParseObj, id=" + prevParseObj.id);
        oldVal = _.pick(prevParseObj.toJSON(), isDirty);
        _beforeSave(parseObj, oldVal);  // do something here
        request.previousValues = oldVal
        request.object.previousValues = oldVal
        return response.success();
      , function(err) 
        return response.error("parsObj NOT FOUND, parseObj.id=" + parseObj.id);
      );
     else 
      return response.success();
    
  
);

Parse.Cloud.afterSave('ParseObj', function(request) 
  var parseObj;
  // request keys=["object","installationId","user","master"], 
  oldVal = request.previousValues  // undefined
  oldVal = request.object.previousValues // also, undefined
  parseObj = request.object;
  _afterSave(parseObj, oldVal)  // do something else here
  return; 
);

有什么想法吗?

【问题讨论】:

你有没有想过这个问题?我正在尝试做类似的事情。除了新值之外,我还需要知道 afterSave 期间记录中的旧值。 不幸的是,没有。我不知道如何在 beforeSave 和 afterSave 钩子之间传递值,除非我保存到 Parse.Object - 但这有点愚蠢。 【参考方案1】:

我对此进行了进一步研究,最终将其保存到 Parse 对象中暂时并像这样删除它:

//Add the value you need to the object prior to saving using an "oldValue" key
yourPFObject["oldValue"] = value (this is in your SDK somewhere where the save happens)

//Get that value in afterSave in Cloud Code
var old = object.get("oldValue")

//Do whatever you need to do with "old"...

//Remove the temporary old value so it doesn't stay in the database
object.unset("oldValue") 
object.save()

我希望这会有所帮助。祝你好运!

【讨论】:

以上是关于解析 Javascript API 云代码 afterSave 并访问 beforeSave 值的主要内容,如果未能解决你的问题,请参考以下文章

Powershell 调用阿里云 云解析API 实现动态域名解析

如何在解析云代码中将文本文件附加到山魈邮件?

解析 - 使用云代码发送推送通知(Swift)

寻找云代码(javascript)专家,处理安装和渠道

javascript 解析服务器云添加角色

阿里云DNS api接口 shell 更改DNS解析