请查看下面的代码。这是一个使用一些下划线功能的Backbone / Parse代码。 我正在尝试迭代Parse类以检索该类中所有对象的“firstName”属性。 我有2个问题。 第一个,如注释所示,它正确地检索了名字,但它重复了它们。因此,如果有5个对象,它将检索5 firstName * 5.这里存在迭代问题。这与控制台日志一起显示。
第二个问题是,我尝试将firstName值推送到数组中,然后返回它,因此我可以稍后在代码中使用testt变量来使用这些值。但是,使用控制台日志检查testt内容会发送消息而不是firstname列表。 您是否看到如何修复此代码?
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
答案 0 :(得分:1)
重复问题是因为您使用doopizlist
循环each
两次,再次使用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);
});