Nano Hash - криптовалюты, майнинг, программирование

Триггер parse.com afterDelete не работает полностью

У меня есть класс Parse Comment. Каждый Comment отправляется ParseUser, и я хочу отслеживать в моем пользователе синтаксического анализа, сколько комментариев он отправил, поэтому я создал следующие триггеры в коде Parse Cloud:

/*
* -------------   AFTER SAVE
*/
Parse.Cloud.afterSave("Comment", function(request) {

  //if it's the first save
  if(!request.object.existed())  {

    //increment the User's comments
    query = new Parse.Query(Parse.User);
    query.get(request.object.get("createdBy").id, {
      success: function(user) {

        user.increment("comments");
        user.save();

      }, error: function(error) {
        console.log("Error searching the User");
      }
    });
  }
});

/*
* -------------   AFTER DELETE
*/
Parse.Cloud.afterDelete("Comment", function(request) {

  //decrement the User's comments
  console.log("The user who submitted the comment has the id: " + request.object.get("createdBy").id);
  query = new Parse.Query(Parse.User);
  query.get(request.object.get("createdBy").id, {
    success: function(user) {

      console.log("Retrieved the user. He has username: " + user.get("username"));

      user.increment("comments", -1);
      user.save();

    }, error: function(error) {
      console.log("Error searching the user - error afterDelete@Comment 2");
    }
  });

});

Проблема в том, что триггер afterSave работает, а afterDelete нет, и я не могу понять, почему. Я могу получить User, потому что два console.log показывают, какой пользователь является правильным, но я не могу сохранить его после increment(user, -1). Заранее спасибо.

РЕДАКТИРОВАТЬ:
Здесь триггер User:

/*
* -------------   BEFORE SAVE
*/
Parse.Cloud.beforeSave("User", function(request, response) {

  var comments = request.object.get("comments");
  if(comments == null || comments < 0)
    request.object.set("comments", 0);  

  var itemSaved = request.object.get("itemSaved");
  if(itemSaved == null || itemSaved < 0)
    request.object.set("itemSaved", 0);

  var username = request.object.get("username");
  if(username.length < 6 || username.length > 20)
    response.error("username must be longer than 6");
  else  {
    response.success();
  }

});

/*
* -------------   AFTER DELETE
*/
Parse.Cloud.afterDelete("User", function(request) {
  query = new Parse.Query("Comment");
  query.equalTo("createdBy", request.object.id);
  query.find({
    success: function(comments) {
      Parse.Object.destroyAll(comments, {
        success: function() {},
        error: function(error) {
          console.error("Error deleting related comments " + error.code + ": " + error.message);
        }
      });
    },
    error: function(error) {
      console.error("Error finding related comments " + error.code + ": " + error.message);
    }
  });
});

Ответы:


1

Согласно документации Parse, "Если вы хотите использовать afterDelete для предопределенного класса в Parse JavaScript SDK (например, Parse.User), вы не должны передавать строку в качестве первого аргумента. Вместо этого вы должны передать сам класс».

24.02.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..