如何取消设置“beforeSave”云函数中的嵌套属性?

Posted

技术标签:

【中文标题】如何取消设置“beforeSave”云函数中的嵌套属性?【英文标题】:How to unset nested property in `beforeSave` cloud function? 【发布时间】:2019-12-24 15:12:09 【问题描述】:

我扩展了Parse.Object。现在我想在保存对象之前取消设置嵌套属性。这个嵌套属性settings 是一个对象。

所以我的钩子看起来像这样:

Parse.Cloud.beforeSave('MyObject', req => 
   if (req.object.get('settings').propertyToUnset) 
       req.object.unset('settings.propertyToUnset');
   
);

但是,这会产生错误Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

unset 如何用于嵌套属性?

【问题讨论】:

【参考方案1】:

你可以试试这样的:

Parse.Cloud.beforeSave('MyObject', async req => 
   const settings = req.object.get('settings');
   await settings.fetch();
   if (settings.get('propertyToUnset')) 
       settings.unset('propertyToUnset');
       await settings.save();
   
);

【讨论】:

也就是说嵌套对象默认不抓取? 它不起作用:“fetch 不是函数”。如果我使用delete req.object.get('settings').propertyToUnset,它就可以工作。所以 Parse 没有办法用 unset 做到这一点? 我假设settingsPointer。它是一个对象吗?在这种情况下,delete 是要走的路。 它是一个对象,是的。谢谢,我会在问题中编辑它。【参考方案2】:

解决方法是使用纯 javascript 命令delete 删除嵌套对象settings 的属性:

Parse.Cloud.beforeSave('MyObject', req => 
    if (req.object.get('settings').propertyToUnset) 
        delete req.object.get('settings').propertyToUnset;
    
);

【讨论】:

以上是关于如何取消设置“beforeSave”云函数中的嵌套属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何取消设置嵌套 foreach 中的每个数组?

解析服务器 + 云代码:Parse.Object 上的 beforeSave()

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

通过嵌套的 foreaches 取消设置多维数组中的键

解析云代码之前保存未在更新时运行

如何在 Amazon Redshift 的列中取消嵌套/展开/展平逗号分隔值?