Анализирайте насочените известия за конкретни потребители Cloud Code

В момента се опитвам да добавя насочени известия към моето приложение, по-специално насочено известие до двама различни потребители, което се задейства от трети потребител.

Облачният код по-долу работи добре, с изключение на факта, че насочените известия не работят. Искам две насочени известия, зададени както за победителя, така и за губещия потребител, когато тази функция се задейства от страната на клиента от третия потребител.

Parse.Cloud.define('addWinsLosses', function(request,response) { 

    Parse.Cloud.useMasterKey(); 

    var winnerUserId = request.params.winnerUserId;
    var loserUserId = request.params.loserUserId;

    var User = Parse.Object.extend('_User');
    var winner = new User({ objectId: winnerUserId });
    var loser = new User({ objectId: loserUserId });

    console.log(JSON.stringify(winner));
    console.log(JSON.stringify(loser));

    winner.increment('wins');
    loser.increment('losses');

    var pushQuery = new Parse.Query(Parse.Installation);

    pushQuery.equalTo('user', winner)

    Parse.Push.send({
        where: pushQuery
        data: {
            alert: "You Won!",
            badge: "increment"
        }
    }, {
        success: function () {
            response.success();
        },
        error: function (error) {
            response.error(error);
        }
    })

    var pushQuery = new Parse.Query(Parse.Installation);

    pushQuery.equalTo('user', loser)

    Parse.Push.send({
        where: pushQuery
        data: {
            alert: "You lost.",
            badge: 'increment'
        }
    }, {
        success: function () {
            response.success();
        },
        error: function (error) {
            response.error(error);
        }
    })

    Parse.Promise.when([winner.save(), loser.save()]).then(function () {
        // both saves have completed
        response.success();
    }, function (error) {
        // one or more errors
        console.log("Error in addWinsLosses : " + error.message);
        response.error(error);
    });
});

Добавих необходимата връзка:

let installation = PFInstallation.currentInstallation()
            installation["user"] = PFUser.currentUser()
            installation.saveEventually()

Това трябва да е указател към PFUser, който след това се сравнява с друг указател към PFUser в моя облачен код, или „победител“, или „губещ“. Съобщението е различно за двамата потребители.

И така, няколко въпроса:

  1. Какво не е наред с моя код?
  2. Как мога да изчистя кода си, като започна с комбинирането на "Parse.Push.send"?

person Wesley Cho    schedule 15.12.2015    source източник
comment
Помислете просто за задаване на потребителския идентификатор (с някакъв префикс) като канал   -  person Wain    schedule 16.12.2015


Отговори (1)


Вероятно трябва да извиквате само response.error() и response.success() в последното обратно извикване на обещанието. В противен случай облачната функция почти сигурно ще се върне преждевременно, след като едно от насочените известия бъде изпратено или когато потребителските обекти приключат със записването (което от двете приключи първо).

Бих се опитал да премахна обратните извиквания за успех/грешка от вашето използване на Parse.Push.send и вместо това да добавя обектите на обещание, върнати от функцията към извикването на Parse.Promise.when:

var winnerPushPromise = Parse.Push.send({
    where: pushQuery
    data: {
        alert: "You Won!",
        badge: "increment"
    }
})

...

var loserPushPromise = Parse.Push.send({
    where: pushQuery
    data: {
        alert: "You lost.",
        badge: 'increment'
    }
})

var promises = [winnerPushPromise, loserPushPromise, winner.save(), loser.save()]

Parse.Promise.when(promises).then(function () {
...

РЕДАКТИРАНЕ

Току-що забелязах проблем с вашите потребителски обекти, който може да причинява проблеми с вашата заявка - опитайте да промените „objectId“ на „id“.

person Jake Krog    schedule 16.12.2015
comment
Трябва ли да променя името на заявката за всяко натискане? - person Wesley Cho; 17.12.2015
comment
Лично аз бих създал променлива за всяка насочена заявка, но няма значение дали искате да използвате повторно променливата на pushQuery (стига да актуализирате заявката, преди да изпратите второто насочено известие). - person Jake Krog; 18.12.2015