我的解析数据库中有两个类,一个叫做“TrebUser”,另一个叫做“UserImage”,描述如下:
TrebUser
-------------------------------------------------- -
| objectID |名字|姓氏|图像|
(string)(string)(string)(UserImage ObjectId)
UserImage
------------------------------------
| objectID |图片| imagename |
(字符串)(文件)(字符串)
对于给定的TrebUser,我想显示一个包含其名字,姓氏的个人资料,并显示图像名称(一旦我设法显示图像名称,我将尝试实际显示图像)。我试图使用一个查询来检索TrebUser,然后使用第二个嵌套查询或承诺(我在下面使用过)来检索该用户的图像名,然后将该图像名返回到我将打印它的位置屏幕。由于某种原因,它总是以未定义的形式返回,即使我使用弹出警报时它显示的名称也很好。我认为这与异步执行有关。有什么想法吗?
function getPhoto(i){
var TrebUser = Parse.Object.extend("TrebUser");
var queryTrebUser = new Parse.Query(TrebUser);
var UserImage = Parse.Object.extend("UserImage");
var queryUserImage = new Parse.Query(UserImage);
queryTrebUser.find().then(function(results) {
alert("Successfully retrieved " + results.length + "object");
var object = results[i];
var imageId = object.get('image').id;
queryUserImage.equalTo("objectId", imageId);
return queryUserImage.find();
}).then(function(imageResults) {
var object2 = imageResults[i];
//this alert shows the image 'name' perfectly, however when i return the object2.get('name') it shows
//up as undefined!
alert("Successfully retrieved " + imageResults.length + " object with name " + object2.get('name'));
return object2.get('name');
}, function(error) {
alert("Error: " + error.code + " " + error.message);
});
}
答案 0 :(得分:2)
您应该只使用.include(key)
方法,例如
var TrebUser = Parse.Object.extend("TrebUser");
var queryTrebUser = new Parse.Query(TrebUser);
queryTrebUser.include("image");
queryTrebUser.find().then(function(results) {
alert("Successfully retrieved " + results.length + "object");
var object = results[i];
var image = object.get('image');
var imageName = image.get('name');
});
根据您提供的代码,我会高度质疑您正在做的一些事情。也许我应该解释一下当前代码会做什么(顺序会因网络速度而异):
i
(3)传递给内部范围undefined
(范围内没有return
语句)find()
构建查询注意:如果您知道ID,则应使用get(id)
then()
处理程序