解析云代码-等待并返回关系查询

时间:2019-02-19 20:19:19

标签: javascript parse-server parse-cloud

所以我想让这个云查询功能运行。基本上,我想通过ID返回配置文件。然后使用该结果对象,运行关系查询并返回第一个结果。

我不确定是否感到困惑,但是我在等待完整的查询完成后才返回。

谢谢

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 个答案:

答案 0 :(得分:0)

如果您在承诺.then(function(){return 'a'}) the内返回,则返回'a'does not return the异步(请求)`!

如果您这样做

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


});