Анализирайте броячите за актуализиране на After_Delete

Използвам облачен код на Parse, за да актуализирам някои броячи на потребител, когато after_delete се извиква на определени класове. Потребителят има броячи за абонаменти, последователи и следване, които се увеличават в before_save за абонаменти и следвания и намаляват в before_delete за същите класове.

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

Може би концептуално съм объркан относно най-добрия начин да постигна това, но не мога да разбера как правилно да настроя следния код в follow 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