【问题标题】:Nested Queries returning UNDEFINED using javascript and parse.com database使用 javascript 和 parse.com 数据库返回 UNDEFINED 的嵌套查询
【发布时间】:2013-08-10 23:52:55
【问题描述】:

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

TrebUser
-------------------------------------------------- --
|对象ID |名字 |姓氏 |图片 |

(string) (string) (string) (UserImage ObjectId)

用户图像
------------------------------------
|对象ID |图片 |图片名称 |
(字符串) (文件) (字符串)

对于给定的 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);

    });
}

【问题讨论】:

    标签: javascript undefined parse-platform


    【解决方案1】:

    您应该只使用.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 项
    • 尝试获取我认为应该为空/未定义的东西的属性
    • 从 Promise 中返回一个字符串属性,非常糟糕

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      相关资源
      最近更新 更多