2012-05-10 73 views
3

該代碼應該返回12334還是12433?等待...推遲for for循環

我想到12334,但它給12433 ...

console.log '1' 
anArray.forEach (info, index, array)-> 
    console.log '2' 

    await model.findOne info, defer(err, doc) 
    console.log '3' 

console.log '4' 
+1

你爲什麼期待'12334'? –

+0

,因爲forEach是同步的並且等待+延遲使findOne也同步否? – Charles

+0

'ReferenceError:未定義anArray' –

回答

4

你的直覺是不正確的:IcedCoffeeScript的await...defer不能阻止同步forEach循環。

請記住,IcedCoffeeScript編譯爲JavaScript,不支持阻塞。一旦你在數組上調用了forEach,你就已經承諾在任何事件觸發前迭代整個數組。

好消息是,您可以通過使用IcedCoffeeScript自己的循環結構來獲得所需的行爲。在你的情況,

for info, index in anArray -> 
    ... 

有關處理JavaScript的無阻塞事件模型的更多信息,請參閱我的新書,Async JavaScript

+0

哦,是的!這是如此明顯:p謝謝:) – Charles