代码之家  ›  专栏  ›  技术社区  ›  Hudi Ilfeld

仅为客户端在解析云代码中向ParseObjects添加新字段。不保存到数据库

  •  1
  • Hudi Ilfeld  · 技术社区  · 6 年前

    当我想从parse db(mongo)中检索ParseObjects(Posts)以显示在我的Android应用程序中时,我需要在其中添加新字段 ParseObject 在交付给客户之前在云代码中。这些领域是 只有 对客户来说是必要的,我也是 希望将它们保存到cloud/db。但出于某种奇怪的原因,似乎只有在我将其他字段保存到云上时,它们才会成功地传递到客户端。 像这样的方法会奏效:

    Parse.Cloud.define("getPosts", function(request, response){
       const query = new Parse.Query("Post");
       query.find()
       .then((results) => {
         results.forEach(result => {
            result.set("cloudTestField", "this is a testing server cloud field");
         });
        return Parse.Object.saveAll(results);
       })
       .then((results) => {
         response.success(results);
       })
      .catch(() => {
        response.error("wasnt able to retrieve post parse objs");
      }); 
    });
    

    这将向我的客户提供所有新字段。 但如果我不将它们保存到db,只在客户交付之前添加它们 比如:

    Parse.Cloud.define("getPosts", function(request, response){
       const query = new Parse.Query("Post");
       query.find()
       .then((results) => {
           results.forEach(result => {
            result.set("cloudTestField", "this is a testing server cloud field");
           });
         response.success(results);
        })
       .catch(() => {
        response.error("wasnt able to retrieve post parse objs");
       }); 
    });
    

    然后出于某种原因,在我的android studio(客户端日志)中,我在“cloudTestField”键上收到null

    ParseCloud.callFunctionInBackground("getPosts", params,
                new FunctionCallback<List<ParseObject>>(){
                    @Override
                    public void done(List<ParseObject> objects, ParseException e) {
                        if (objects.size() > 0 && e == null) {
                            for (ParseObject postObj : objects) {
                                Log.d("newField", postObj.getString("cloudTestField"));
                            }
                        } else if (objects.size() <= 0) {
                            Log.d("parseCloudResponse", "sorry man. no objects from server");
                        } else {
                            Log.d("parseCloudResponse", e.getMessage());
                        }
                    }
                });
    

    出于某种原因,输出是:

    newField: null
    

    在没有ParseDB的情况下在cloud I中添加对象的方法

    1 回复  |  直到 6 年前
        1
  •  2
  •   Hudi Ilfeld    6 年前

    事实证明,您无法将非持久性字段添加到ParseObject。 所以我需要将parseObjects转换为Json,现在它就像一个符咒:

    Parse.Cloud.define("getPosts", function(request, response){
    const query = new Parse.Query("Post");
    var postJsonList = [];
    query.find()
    .then((results) => {
        results.forEach(result => {
            var post = result.toJSON();
            post.cloudTestField = "this is a testing server cloud field";
            postJsonList.push(post);
        });
        response.success(postJsonList);
    })
    .catch(() => {
        response.error("wasnt able to retrieve post parse objs");
    }); 
    });