2014-02-24 56 views
0

比方说,我有一个名为集合的集合集合。现在,让我们考虑一下这段代码。javascript Underscore嵌套循环未定义值

_.each(collections, function(collection){ 
     _.each(collection, function(item){ 
      console.log(item); 
     } 
}); 

几次,它打印未定义的值。它似乎在从前一个循环实际设置之前打印项目值。为什么它不保留执行顺序?

在此先感谢。

+0

都在收藏什么? _.each的实现不应该给这种行为。 –

+0

有没有任何答案可以帮助你?如果是的话,你可以标记正确的答案。如果不是,你能澄清你仍然有疑问的地方吗? – bejonbee

回答

0

我想这只是因为内部循环也运行它的异步回调。所以父循环不会等待它完成,它会在下一次迭代中直接运行。

+0

[下划线的'每个'实现](http://underscorejs.org/docs/underscore.html#section-15)不会异步运行它的回调。如果可用,它默认为[原生'forEach'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)。 – bejonbee

+1

我不知道,谢谢! – htatche

1

collectionscollection普通数组?或者他们是Backbone.Collection

您描述的行为不是下划线中的错误。它应该保持你期望的执行顺序。这可能是该集合中的数据的问题。

如果你想运行.each前剥去您的收藏所有未定义的值,可以使用_.compact(array)(假设他们是普通的JavaScript数组)

_.each(_.compact(collections), function(collection){ 
    _.each(_.compact(collection), function(item){ 
     console.log(item); 
    } 
}); 
+0

我认为你说'collection'是一个Backbone集合,在这种情况下'collection.each(function(item){...})'是正确的。 –