使用javascript和parse.com数据库返回未定义的嵌套查询

使用javascript和parse.com数据库返回未定义的嵌套查询,javascript,undefined,parse-platform,Javascript,Undefined,Parse Platform,我的解析数据库中有两个类,一个称为“TrebUser”,另一个称为“UserImage”,描述如下: 特雷布瑟 ---------------------------------------------------- |objectID | firstname | lastname | image | (字符串)(字符串)(字符串)(UserImage ObjectId) 用户图像 ------------------------------------ |objectID | image |

我的解析数据库中有两个类,一个称为“TrebUser”,另一个称为“UserImage”,描述如下:

特雷布瑟
----------------------------------------------------
|objectID | firstname | lastname | image |

(字符串)(字符串)(字符串)(UserImage ObjectId)

用户图像
------------------------------------
|objectID | image | imagename |
(字符串)(文件)(字符串)

对于给定的TrebUser,我希望显示一个配置文件,其中包括他们的名字、姓氏,并显示imagename(一旦我设法显示图像名称,我将尝试实际显示图像)。我正在尝试使用一个查询来检索TrebUser,然后使用第二个嵌套查询或promise(如下所述)来检索该用户的imagename,然后将imagename返回到我将在屏幕上打印它的位置。由于某些原因,它总是返回为未定义,即使当我使用弹出警告时,它显示的名称很好。我认为这与异步执行有关。有什么想法吗

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);

    });
}

您应该只使用
.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)传递给内部作用域
  • return
    undefined
    (范围内无
    return
    语句)
  • 。。。(当异步方法在几秒钟后返回数据时)
  • 从结果中获取第四项(基于0的数组)
  • 提取图像ID
  • 使用
    find()
    构造一个查询注意:如果您知道id,应该只使用
    get(id)
  • 将查询作为承诺传递给下一个
    then()
    处理程序
  • 。。。(当下一个异步方法在几秒钟后返回数据时)
  • 尝试从只应包含一项的数组中获取第四项
  • 尝试获取我认为应该为null/未定义的属性
  • 从承诺中返回字符串属性,严重违反承诺