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