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

标签 javascript undefined parse-platform

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

Treb用户
-------------------------------------------------- --
|对象ID |名字 |姓氏 |图片 |

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

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

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

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 语句)
  • ...(当异步方法几秒后返回数据时)...
  • 从结果中获取第 4 项(从 0 开始的数组)
  • 提取图像 ID
  • 使用 find() 构建查询 注意:如果您知道 id,则应仅使用 get(id)
  • 将查询作为 promise 传递给下一个 then() 处理程序
  • ...(当下一个异步方法几秒后返回数据时)...
  • 尝试从数组中获取第 4 个项目,该数组中应该只有一项
  • 尝试获取根据我的理解应该为 null/未定义的属性
  • 从 Promise 返回一个字符串属性,严重破坏了事情

关于javascript - 使用 javascript 和 parse.com 数据库返回 UNDEFINED 的嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18140072/

相关文章:

javascript - TypeError : this. $el.DataTable 不是一个函数( REACT.JS)

ios - 来自 Parse 的标签不会更新——Swift 1.2

ios - 我如何在 ios 中使用 parse 执行 PFRelation 查询

javascript - 如何在html Canvas 上replaceByImage()而不是drawImage()(忽略不透明度)?

javascript - JSLint:在定义之前使用

javascript - 使用通过数组传递的对象时出现问题

swift - PFFile 作为 UIImageView

javascript - 如何使用 javascript/jquery 禁用表单内的所有内容?

javascript - 如何在kineticJS中绘制对象的动画路径?

javascript - 为什么状态没有按预期更新?