parse-community/docs

๐Ÿ“™ beforeDelete Trigger Example

dblythy opened this issue ยท 3 comments

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.";
  }
});

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

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

No problem.