Анализировать счетчики обновлений After_Delete

Я использую облачный код Parse для обновления некоторых счетчиков пользователя, когда after_delete вызывается для определенных классов. У пользователя есть счетчики подписок, подписчиков и подписок, которые увеличиваются в before_save для подписок и подписок и уменьшаются в before_delete для тех же классов.

Проблема, с которой я сталкиваюсь, заключается в том, что пользователь удаляется. Функция after_delete уничтожает все связанные подписки/подписки, но это запускает обновление для (удаленного) пользователя через before_delete для подписок/подписок. Это всегда приводит к ошибке before_delete.

Возможно, я концептуально запутался в том, как лучше всего это сделать, но я не могу понять, как правильно настроить следующий код перед before_delete:

var fromUserPointer = follow.get("fromUser");
var toUserPointer = follow.get("toUser");

fromUserPointer.fetch().then( function(fromUser){
    // update following counter
    // if from user is already deleted, none of the rest of the promise chain is executed
}.then( function (fromUser){
    return toUserPointer.fetch();
}.then( function(toUser){
    // update followers count
}

Есть ли способ определить, указывают ли fromUserPointer и toUserPointer на действительный объект, за исключением фактического выполнения выборки?


person toddg    schedule 14.02.2015    source источник
comment
Вы имеете в виду ... когда пользователь A следует за пользователем B, у пользователя B увеличивается количество подписчиков. Затем, если пользователь A удален, количество подписчиков пользователя B должно быть уменьшено? Вы используете отношение или таблицу соединений?   -  person xissburg    schedule 14.02.2015
comment
Да, когда пользователь A следует за пользователем B, у пользователя B увеличивается количество подписчиков, И у пользователя A увеличивается количество подписчиков - это работает нормально. Проблема возникает только при попытке удалить пользователя. Я использую таблицу соединений.   -  person toddg    schedule 14.02.2015


Ответы (1)


Это не ошибка, чтобы не найти пользователя, но не обрабатывая случай отсутствия объекта при выборке, это неявно рассматривается как ошибка.

So...

fromUserPointer.fetch().then(f(result) {
    // good stuff
}).then(f(result) {
    // good stuff
}).then(f(result) {
    // good stuff
}, f(error) {
    // this is good stuff too, if there's no mode of failure
    // above that would cause you to want NOT to delete, then...
    response.success();
});
person danh    schedule 14.02.2015
comment
Но как мне продолжить получать toUser и уменьшать их счетчик? Мне все равно нужно это сделать (если пользователь удалит свою учетную запись, все люди, за которыми он следил, потеряют 1 подписчика). Могу ли я поместить этот код в блок ошибок? - person toddg; 14.02.2015
comment
Хорошо понял. Я не совсем понял обработку ошибок. Просто верните обещание, которое не отклонено в блоке ошибок. - person toddg; 14.02.2015