How to unset nested property in `beforeSave` cloud function?

202 Views Asked by At

I've extended a Parse.Object. Now I want to unset a nested property before saving an object. This nested property settings is an object.

So my hook looks like this:

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

However, that produces the error Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

How does unset work for nested properties?

2

There are 2 best solutions below

0
On BEST ANSWER

The solution is to use the plain JavaScript command delete to delete a property of nested object settings:

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

You can try something like this:

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();
   }
});