我正在尝试从objectId获取用户对象。我知道objectId是有效的。但我可以让这个简单的查询工作。这有什么问题?查询后用户仍未定义。
var getUserObject = function(userId){
Parse.Cloud.useMasterKey();
var user;
var userQuery = new Parse.Query(Parse.User);
userQuery.equalTo("objectId", userId);
userQuery.first({
success: function(userRetrieved){
console.log('UserRetrieved is :' + userRetrieved.get("firstName"));
user = userRetrieved;
}
});
console.log('\nUser is: '+ user+'\n');
return user;
};
答案 0 :(得分:21)
使用promises的快速云代码示例。我在那里有一些文档,希望你能跟进。如果您需要更多帮助,请告诉我。
Parse.Cloud.define("getUserId", function(request, response)
{
//Example where an objectId is passed to a cloud function.
var id = request.params.objectId;
//When getUser(id) is called a promise is returned. Notice the .then this means that once the promise is fulfilled it will continue. See getUser() function below.
getUser(id).then
(
//When the promise is fulfilled function(user) fires, and now we have our USER!
function(user)
{
response.success(user);
}
,
function(error)
{
response.error(error);
}
);
});
function getUser(userId)
{
Parse.Cloud.useMasterKey();
var userQuery = new Parse.Query(Parse.User);
userQuery.equalTo("objectId", userId);
//Here you aren't directly returning a user, but you are returning a function that will sometime in the future return a user. This is considered a promise.
return userQuery.first
({
success: function(userRetrieved)
{
//When the success method fires and you return userRetrieved you fulfill the above promise, and the userRetrieved continues up the chain.
return userRetrieved;
},
error: function(error)
{
return error;
}
});
};
答案 1 :(得分:0)
这个问题是Parse查询是异步的。这意味着它将在查询有时间执行之前返回user(null)。无论您想要用户做什么,都需要将其置于成功之中。希望我的解释可以帮助您理解为什么它未定义。
查看Promises。从第一个查询中获得结果后,它是一种更好的调用方法。