Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parse platform 解析云代码:在检索之前修改对象_Parse Platform - Fatal编程技术网

Parse platform 解析云代码:在检索之前修改对象

Parse platform 解析云代码:在检索之前修改对象,parse-platform,Parse Platform,假设我有一个Users类和一个Posts类,每个Post对象都有一个用户指针。我还有一个Comment类,每个Comment都有一个用户指针。每当我获取一个用户时,我都希望获取该用户在一个网络查询中发表的所有帖子和评论。复合子查询不起作用,因为我有多种数据类型。理想情况下,我希望帖子和评论是检索到的用户对象的属性 在云代码中,有没有一种方法可以拦截对象请求,并在发送到客户端之前将其修改为具有适当的属性?您不能在检索时修改对象,但可以编写自己的云函数。在云函数中,您可以将用户ID作为参数,然后通过

假设我有一个Users类和一个Posts类,每个Post对象都有一个用户指针。我还有一个Comment类,每个Comment都有一个用户指针。每当我获取一个用户时,我都希望获取该用户在一个网络查询中发表的所有帖子和评论。复合子查询不起作用,因为我有多种数据类型。理想情况下,我希望帖子和评论是检索到的用户对象的属性


在云代码中,有没有一种方法可以拦截对象请求,并在发送到客户端之前将其修改为具有适当的属性?

您不能在检索时修改对象,但可以编写自己的云函数。在云函数中,您可以将用户ID作为参数,然后通过将3个查询的输出组合成一个结果来创建一个复合对象

您需要查询:

  • 用户对象
  • 该用户的帖子
  • 该用户的评论
您可以获得每个查询的承诺(
find()
etc返回承诺对象),并使用
Parse.promise.when(userQueryPromise,postQueryPromise commentQueryPromise)
构建复合对象并返回它

var _ = require('underscore');

Parse.Cloud.define('getUserWithPostsAndComments', function(request, response) {
    var userId = request.params.userId;

    var userPointer = new Parse.User();
    userPointer.id = userId;

    var userQuery = new Parse.Query(Parse.User);

    var postQuery = new Parse.Query('Post');
    postQuery.equalTo('user', userPointer);

    var commentQuery = new Parse.Query('Comment');
    commentQuery.equalTo('user', userPointer);

    Parse.Promise.when(userQuery.get(userId), postQuery.find(), commentQuery.find())
    .then(function(user, posts, comments) {
        var composite = {
            // User properties you want
            name: user.get('username'),
            email: user.get('email')
        };
        // Post properties you want
        composite.posts = _.map(posts, function(post) {
            return {
                id: post.id,
                title: post.get('title')
            };
        });
        // Comment properties you want
        composite.comments = _.map(comments, function(comment) {
            return {
                id: comment.id,
                body: comment.get('bodyText')
            };
        });
        // return the composite object
        response.success(composite);
    }, function(error) {
        response.error(error);
    });
});
或者,上述then块可以只返回原始结果,例如:

.then(function(user, posts, comments) {
    return {
        user: user,
        posts: posts,
        comments: comments
    };
}, function(error) {
    // etc...

虽然我希望在我进行的每个用户查询中检索这些附加字段,但使用云函数,我基本上必须列出我可能需要的每个可能的查询,并一遍又一遍地执行此逻辑。不太理想,但我想它可以工作。iOS中是否有.when()类似程序?我知道有一个orQuery,但它只支持多个返回相同结果的查询class@sddhhanover这里详细介绍了Objective-C Promise实现(RXPromise):非常感谢,尽管我与这个问题无关,但我使用了代码的一小部分(在这里定义
var composite={}
)来解决我的问题…再次谢谢你,伙计