parse-community / docs

Parse Platform docs
https://docs.parseplatform.org
Other
313 stars 517 forks source link

📙 beforeDelete Trigger Example #781

Closed dblythy closed 4 years ago

dblythy commented 4 years ago

Link to section: https://docs.parseplatform.org/cloudcode/guide/#delete-triggers

What is the issue? The example is:

Parse.Cloud.beforeDelete("Album", (request) => {
  const query = new Parse.Query("Photo");
  query.equalTo("album", request.object);
  query.count()
    .then((count) => {
      if (count > 0) {
        throw "Can't delete album if it still has photos.";
    })
    .catch((error) {
      throw "Error " + error.code + " : " + error.message + " when getting photo count.";
    });
});

And states:

If the function throws, the Album object will not be deleted, and the client will get an error. Otherwise, the object will be deleted normally.

-The function isn't async, or doesn't return a promise. -Syntax error after the first throw (no closing bracked) -Syntax error after .catch (no =>) -Catching the first error will return 'Error undefined : undefined when getting photo count.'

I might be wrong, but wouldn't the delete happen prior to the error throwing?

Can you propose a solution? What changes do you think should be made? Have you considered multiple solutions? Will this be suitable for all use cases?

Parse.Cloud.beforeDelete("Album", (request) => {
  const query = new Parse.Query("Photo");
  query.equalTo("album", request.object);
  return query.count()
    .then((count) => {
      if (count > 0) {
        throw "Can't delete album if it still has photos.";
      }
    })
});

or

Parse.Cloud.beforeDelete("Album", async (request) => {
  const query = new Parse.Query("Photo");
  query.equalTo("album", request.object);
  const count = await query.count()
  if (count > 0) {
    throw "Can't delete album if it still has photos.";
  }
});
davimacedo commented 4 years ago

I think you're right. Do you want to open a PR for that?

dblythy commented 4 years ago

Yep, I ended up included the changes in the PR for the cloud validator. Is that okay, or would you like a seperate PR?

davimacedo commented 4 years ago

No problem.