我在解析数据库中有一个表(Gtree),与用户一对一的关系。我如何获得价值(与当前用户相关的内容)并保存到全局变量中?
Parse.initialize("key", "key");
var Gtree = Parse.Object.extend("Gtree");
var output = "";
function loadTree() {
var query = new Parse.Query(Gtree);
query.include("user");
query.equalTo("user", Parse.User.current());
query.find({
success: function(results) {
for (var i in results) {
var content = results[i].get("content");
var user = results[i].get("user");
var username = user.get("username");
var id = results[i].id;
output = content;
console.log("CONTENT:" + content);
}
},
error: function(error) {
console.log("Query Error:" + error.message);
}
});
}
答案 0 :(得分:0)
query.find()
返回一个Parse.Promise
对象,缓存并返回该对象更简单,而不是实际结果。
你可能想要这样的东西。
Parse.initialize("key", "key");
var Gtree = Parse.Object.extend("Gtree");
var promiseCache = {};
function loadTree() {
if(!promiseCache.gtree_user) {
var query = new Parse.Query(Gtree);
query.include("user");
query.equalTo("user", Parse.User.current());
promiseCache.gtree_user = query.first().then(function(result) {
return {
content: result.get("content"),
user: result.get("user"),
username: result.get("user").getUsername(),
id: result.id
};
}, function(error) {
console.log("Query Error:" + error.message);
return error;
});
}
return promiseCache.gtree_user;
}
这样,任何loadTree()
的调用都可以保证返回一个promise,并且只能通过promise方法访问用户数据,例如:
loadTree().then(function(userData) {
// userData.content, userData.user, userData.username, userData.id are available here
}, function(error) {
// handle error case hare
});
请注意,应避免使用全局命名空间,因为它容易发生名称冲突和安全漏洞。上面的代码将更好地包含在例如。自执行函数或onload事件处理程序。