2017-11-01 1 views
0

내 node.js 프로그램에서 foo을 30 초마다 인쇄하도록합니다. 그래서 다음과 같은 코드를 작성합니다 :node.js 몇 초 동안 일시 중지

let count = 0 

function foo() { 
    console.log(`foo`) 
    count += 1 
    // do other things that takes about 20 seconds. 
} 

while (count < 10) { 
    console.log(`inside while loop`) // my screen keep printing `inside while loop` until "JavaScript heap out of memory" error 
    setTimeout(foo, 30000) // It looks like that `foo` is scheduled to be triggered after 30 seconds. Before it gets triggered, node.js program keeps doing other things. 
} 

이 코드는 예상 한대로 작동하지 않습니다.

foo은 30 초 후에 트리거 될 예정입니다. node.js 프로그램은 트리거되기 전에 다른 작업을 계속합니다.

어떻게 30 초 동안 프로그램을 일시 중지 할 수 있습니까?

프로그램이 몇 초 동안 실행되고 JavaScript heap out of memory 오류로 인해 충돌이 발생했습니다.

sleep module이 작동하지 않습니다. 잠들 때마다 foo은 필요한 일을 그만 두었습니다. 루프 반복을 많이 만들고 setTimeout 콜백을 등록하는 동안

+0

foo가 비동기이므로 while 루프가 해당 시간 초과보다 빠르게 반복되므로 메모리 힙이 발생합니다 –

답변

1

이 때문에 자바 스크립트

의 비동기 특성이다. 각 콜백 실행 후 setTimeout 콜백을 등록하는 것이 좋습니다.

let counter = 0; 
function foo() { 
    console.log(`foo ${counter}`); 
    counter ++; 
    if (counter < 3) { 
    setTimeout(foo, 1000); 
    } 
} 
foo(); 

다른 옵션은 콜백의 다음 실행을 취소해야 할 경우 setInterval을 사용하여 확인하는 것입니다.

+0

위 코드가 작동하지 않습니다. 전체 코드를 공유하거나 온라인 컴파일러에 넣습니다. – dev9

+0

' foo' 함수를 사용합니다. 그냥 부르세요. https://repl.it/N869/1 – RidgeA

관련 문제