0

请看下面的代码。这是一个使用一些下划线功能的主干/解析代码。我正在尝试遍历 Parse 类以检索该类中所有对象的“firstName”属性。我有两个问题。如注释所示,第一个是它正确检索了名字,但它重复了它们。所以如果有 5 个对象,它将检索 5 firstName * 5。这里有一个迭代问题。这与控制台日志一起显示。

第二个问题是我尝试将 firstName 值推入一个数组,然后返回它,这样我就可以稍后在代码中使用 testt 变量来使用这些值。但是使用控制台日志检查 testt 内容会发送一条消息而不是名字列表。无论如何,您是否看到如何修复此代码?

var DoopizCollection = Parse.Collection.extend({
        model: Subscribers

    }
);
var doopizlist = new DoopizCollection();
var testt;
testt = doopizlist.fetch({
    success: function(doopizlist) {
       var results = [];
        doopizlist.each(function(object) {
            results.push(doopizlist.pluck('firstName'));
            console.log(doopizlist.pluck('firstName')); // logs 2 duplicate arrays
        });

        return results;
    },
    error: function(doopizlist, error) {
        console.log("error"); // The collection could not be retrieved.
    }
});
console.log(testt);   // logs "a b.promise...." message instead of firstNames
4

1 回答 1

1

重复问题是因为您循环了doopizlist 两次,一次是 with each,一次是 with pluck。Pluck 基本上是该map方法的简写。

第二个问题是,您期望testt的是结果值,而实际上它是jqXHR的一个实例,也就是所谓的promise。因此,您可以使用该then方法记录结果的值。

var DoopizCollection = Parse.Collection.extend({
        model: Subscribers

    }
);
var doopizlist = new DoopizCollection();
var testt;
testt = doopizlist.fetch({
    success: function(results) {
        return results.pluck('firstName');
    },
    error: function(results, error) {
        console.log("error"); // The collection could not be retrieved.
    }
});

testt.then(function(results) {
    console.log(results);
});
于 2013-11-01T15:56:29.050 回答