嵌套查询使用javascript和parse.com数据库返回UNDEFINED

时间:2013-08-09 04:33:30

标签: javascript undefined parse-platform

我的解析数据库中有两个类,一个叫做“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);

    });
}

1 个答案:

答案 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');
});

根据您提供的代码,我会高度质疑您正在做的一些事情。也许我应该解释一下当前代码会做什么(顺序会因网络速度而异):

  • 致电getPhoto(3)
  • 使用成功处理程序构建异步查询以获取所有用户(默认情况下限制为前100名),i(3)传递给内部范围
  • 返回undefined(范围内没有return语句)
  • ...(异步方法在几秒后返回数据时)......
  • 从结果中获取第4项(基于0的数组)
  • 提取图片ID
  • 使用find()构建查询注意:如果您知道ID,则应使用get(id)
  • 将查询作为承诺传递给下一个then()处理程序
  • ...(下次异步方法以秒后的数据返回时)......
  • 尝试从一个应该只有一个项目的数组中获取第4个项目
  • 尝试从我的理解中获取某些属性属性为null / undefined
  • 从一个承诺中返回一个字符串属性,破坏了可怕的东西