첫째,선언 let b = true
외부의 콜백 함수입니다. 그것은 다시 초기화된 각 부르지 않습니다.
둘째,10000 에 clearTimeout(fnInterval, 10000)
지 않는 유효한 매개 변수입니다. clearTimeout(timeoutId)
지 첫 번째 매개 변수만을 지웁 시간 제한에 전달하는 즉시. 할 필요 setTimeout
이 10 초 후에,경우에는 당신이 목표입니다. 하지만 일으키는 경쟁 조건이 사이의 두 시간 제한--부정확성을 의미할 수 있습니다 그리워의 일부는 기록이나 바람은 추가 기록합니다.
를 사용하여 카운터는 하나의 솔루션으로,다른 답변을 표시하지만,일반적으로 사용할 때 복잡한 타이밍 setInterval
필요를 삭제 한 후 그것을 일부 반복 횟수,나는 리팩터링하는 일반적인 promisified sleep
기능 setTimeout
. 이 호출하는 코드는 많은 청소기(없음 콜백)과 피로 장난 clearTimeout
.
대신 boolean 플립 플래그를 앞뒤로 사 메시지,더 나은 솔루션을 사용하는 것입니다 배열 계수는 현재 색인에 의해 메시지 배열의 길이 있습니다. 이것은 훨씬 더 쉽게 더 많은 항목을 추가하기 위해 코드가 이해하기 쉽게 때문에 상태에서 암시적인 카운터입니다.
const sleep = ms => new Promise(res => setInterval(res, ms));
(async () => {
const messages = ["hi", "bye"];
for (let i = 0; i < 10; i++) {
console.log(messages[i%messages.length]);
await sleep(1000);
}
})();