2012-05-10 7 views
3

에 지연이 코드가 12334 또는 12433을 반환해야합니까? 기다리는 중 ... forEach 루프

나는 12,334 기대하지만 ... 12,433 제공

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 is not defined' –

답변

4

당신의 직관이 올바르지 않습니다 IcedCoffeeScript의 await...defer는 동기 forEach 루프를 차단할 수 없습니다.

IcedCoffeeScript는 차단을 지원하지 않는 JavaScript로 컴파일된다는 점에 유의하십시오. 배열에서 forEach을 호출하면 이벤트가 발생하기 전에 전체 배열을 반복하는 작업을 수행했습니다.

좋은 소식은 IcedCoffeeScript의 자체 루프 구성을 사용하여 원하는 동작을 얻을 수 있다는 것입니다. 자바 스크립트의 비 차단 이벤트 모델을 다루는 방법에 대한 자세한 내용은 귀하의 경우,

for info, index in anArray -> 
    ... 

에서, 나의 새로운 책, Async JavaScript을 확인하십시오.

+0

오 예! 그것은 너무 분명하다 : 피 감사 :) – Charles