Parse Cloud Code - запрос ожидания и возврата отношения

Поэтому я пытаюсь запустить эту функцию облачного запроса. В основном, я хотел бы получить возврат профиля по его идентификатору. Затем, используя этот объект результата, выполните запрос отношения и верните первый результат.

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

Спасибо

Parse.Cloud.define("getLastWeightForAnimal", async (request) => {

try {

    var AnimalProfiles = Parse.Object.extend("animal_profiles");
    var query = new Parse.Query(AnimalProfiles);

    query.get(request.params.id).then((animalProfile) => {

        var AnimalWeights = animalProfile.relation("weights").query();

        AnimalWeights.descending("createdAt");

        let result = await AnimalWeights.first();
        return result;

    }, (error) => {
      // The object was not retrieved successfully.
      // error is a Parse.Error with an error code and message.
        console.log("Uh Oh Inner");
        console.log("Error Inner: "+  error);
    });

} catch (e) {
    console.log("Uh Oh");
    console.log("Error: "+  e);
}


});

1 ответ

Если вы вернетесь внутри обещания .then(function(){return 'a'}) theвернуть 'а'does not return theasync (запрос)`!

Если вы делаете

Promise.resolve()
  .then(function(){return 'a'}) // this 'a' does not go to any parent function!
  .then(function(val){console.log(val)}) // it goes here!

вы увидите "a" в своем журнале, как простую иллюстрацию.

Вы можете переключить его в асинхронное / ожидание

Parse.Cloud.define("getLastWeightForAnimal", async (request) => {

  try {

    var AnimalProfiles = Parse.Object.extend("animal_profiles");
    var query = new Parse.Query(AnimalProfiles);

    var animalProfile = await query.get(request.params.id)

    var AnimalWeights = animalProfile.relation("weights").query();

    AnimalWeights.descending("createdAt");

    let result = await AnimalWeights.first();
    return result;

  } catch (e) {
    console.log("Uh Oh");
    console.log("Error: "+  e);
  }


});

ИЛИ просто верните обещание, которое вы используете async автоматически вернет значение обещания.

Parse.Cloud.define("getLastWeightForAnimal", async (request) => {

  try {

    var AnimalProfiles = Parse.Object.extend("animal_profiles");
    var query = new Parse.Query(AnimalProfiles);

    // note new return!!
    return query.get(request.params.id).then((animalProfile) => {

        var AnimalWeights = animalProfile.relation("weights").query();

        AnimalWeights.descending("createdAt");

        let result = await AnimalWeights.first();
        return result;

    }, (error) => {
      // The object was not retrieved successfully.
      // error is a Parse.Error with an error code and message.
        console.log("Uh Oh Inner");
        console.log("Error Inner: "+  error);
    });

  } catch (e) {
    console.log("Uh Oh");
    console.log("Error: "+  e);
  }


});
Другие вопросы по тегам