2014-02-24 55 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){...})'是正確的。 –