console.log не отображается на странице журналов синтаксического анализа

В приведенном ниже облачном коде я хотел бы получить отзыв о функции saveAll, но после вызова кода из моего клиента на странице журналов синтаксического анализа я вижу только:

I2014-10-08T15:28:32.930Z] v249: Ran cloud function acceptMeetingBis for user dyGu143Xho with: Input: {"meetingId":"bUSTGNhOer"} Result: Meeting accepted

Вот мой облачный код:

Parse.Cloud.define("acceptMeetingBis", function(request, response) {
var userAcceptingTheMeeting = request.user;
var meetingId = request.params.meetingId;
var changedObjects = [];
var queryForMeeting = new Parse.Query("MeetingObject");
queryForMeeting.equalTo("objectId", meetingId);
queryForMeeting.first({
    success: function(meeting) {
        var userCreatorOfMeeting = meeting.get("user");
        userAcceptingTheMeeting.increment("acceptedMeetings", +1);
        changedObjects.push(userAcceptingTheMeeting);
        meeting.add("participantsObjectId", userAcceptingTheMeeting.id);
        if (meeting.get("participantsObjectId").length === meeting.get("meetingNumberOfPersons")) {
            meeting.set("isAvailable", false);
        }
        changedObjects.push(meeting);
        Parse.Object.saveAll(changedObjects, {
            success: function(objects) {
                console.log("Successfully saved objects"); //this line doesn't show up
                response.success("objects saved");
            },
            error: function(error) {
                // An error occurred while saving one of the objects.
                response.error(error);
            }
        });
        //future query and push notifications will go here
        response.success("Meeting accepted");
    },
    error: function() {
        response.error("Failed to accept the meeting");
    }
});
});

Мне также нужно будет добавить несколько push и еще один вложенный запрос после saveAll(), но прежде чем делать/попытаться сделать это, я хотел бы знать, правильный ли это метод для использования или мне нужно построить код по-другому. Я новичок в javascript, и, честно говоря, я изо всех сил пытаюсь понять некоторые концепции, такие как обещания. Любая помощь приветствуется.


person Diego    schedule 08.10.2014    source источник


Ответы (1)


Ваш звонок в

Parse.Object.saveAll

является асинхронным, и вы вызываете

response.success("Meeting accepted")

сразу после выполнения асинхронного вызова, который завершает выполнение облачного кода метода. Если просто заменить

response.success("objects saved")

с

response.success("Meeting accepted")

вы должны получить то, что хотите.


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

По сути, вот что вы хотите сделать:

Parse.Cloud.define("acceptMeetingBis", function(request, response) {
    var userAcceptingTheMeeting = request.user;
    var meetingId = request.params.meetingId;
    var changedObjects = [];
    var meetingToAccept;
    var queryForMeeting = new Parse.Query("MeetingObject");
    queryForMeeting.get(meetingId).then(function(meeting) {
        meetingToAccept = meeting;
        var userCreatorOfMeeting = meeting.get("user");
        userAcceptingTheMeeting.increment("acceptedMeetings", +1);
        return userAcceptingTheMeeting.save();
    }).then(function(userWhoAcceptedMeetingNowSaved) {
        meetingToAccept.add("participantsObjectId", userWhoAcceptedMeetingNowSaved.id);
        if (meetingToAccept.get("participantsObjectId").length === meetingToAccept.get("meetingNumberOfPersons")) {
            meetingToAccept.set("isAvailable", false);
        }
        return meetingToAccept.save();
    }).then(function(savedMeeting) {
        response.success("Meeting accepted");
    }, function(error) {
        response.error("Failed to accept the meeting");
    });
});

Для каждого асинхронного действия, которое вы хотите выполнить, выполните его в конце одной из функций .then и верните результат (он возвращает обещание). Продолжайте добавлять функции .then, пока не выполните всю работу, которую хотите сделать, после чего вызовите response.success.

person RotaJota    schedule 08.10.2014