2014-10-08 2 views
1

В коде ниже облака я хотел бы получить обратную связь функции SaveAll, но после вызова кода из моего клиента на странице синтаксического анализа журналов я могу видеть только:console.log не отображается на странице Журналы Разбор

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"); 
    } 
}); 
}); 

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

ответ

2

Ваш призыв к

Parse.Object.saveAll

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

response.success("Meeting accepted")

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

response.success("objects saved")

с

response.success("Meeting accepted")

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


Я не видел остальной части вашего вопроса о обещаниях. Вы должны проверить Parse's documentation on chaining promises, что вы хотите здесь.

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

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.