Parse.com查询循环内部

时间:2014-12-11 22:12:33

标签: javascript arrays loops parse-platform

Heres是我正在尝试做的事情:

  1. 获取一个名为RecentPlayers的数组,其中包含4个objectId - 这是有效的。

  2. 为每个objectId运行查询以查找其对应的“名称”(字符串)。 - 不工作。

  3. 将这些名称放入一个名为names的无法想象的新数组中。 - 一旦#2工作,这应该有效。

  4. 守则:

    $(document).ready(function _RP(){
    //Our objectId's array
    var recentlyPlayed = Parse.User.current().get("RecentPlayers");
    //Our names array
    var names = [];
    //Converting
    var User = Parse.Object.extend("User");
    var query = new Parse.Query(User);
    for (var j = 0; j < recentlyPlayed.length; j++) {
            query.equalTo("objectId", recentlyPlayed[j]);
            query.find({
                success: function(results) {
                    var name = results[j].get("name");
                        console.log(name);
                    names.push(name);
                },
                error: function(error) {
                    alert("Error: " + error.code + " " + error.message);
                }
            });
        }
    names = names.sort();
    

    错误:

    var name = results[j].get("name");
    

    控制台:

    (4) Uncaught TypeError: Cannot read property 'get' of undefined
    query.find.succes
    (anonymous function)
    e 
    (anonymous function)
    x.each.x.forEach
    c.extend.resolve
    e
    (anonymous function)
    x.each.x.forEach
    c.extend.resolve
    e
    (anonymous function)
    x.each.x.forEach
    c.extend.resolve
    (anonymous function) 
    e
    (anonymous function)
    g
    c.extend.then
    e
    (anonymous function)
    x.each.x.forEach
    c.extend.resolve
    j.onreadystatechange
    

    我猜这与Parse.com的异步性质有关。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

在这种情况下,query.containedIn可能是更合适的约束。请尝试以下代码段:

var query = new Parse.Query(Parse.User);
query.containedIn("objectId", recentlyPlayed);
query.find().then(function(users) {
   for(var i=0; i < users.length; i++) {
       names.push(users[i].get("name"));
   }
    names.sort();
});

答案 1 :(得分:0)

谢谢,eth3lbert,只需在 i=0中设置 users[i] name.push

var query = new Parse.Query(User);
        query.containedIn("objectId", recentlyPlayed);
        query.find().then(function(users) {
            for (var i=0; i < users.length; i++) {
                names.push(users[i].get("name"));
            }   
names = names.sort();