첫 번째 줄 (대기)은 특정 밀리 초를 기다린 다음 끝납니다.
두 번째 줄 (반복)은 특정 시간 간격 (setInterval)에 실행될 함수를 프로그래밍 한 다음 wait를 호출하고 반복 함수에 설정된 밀리 초 수를 전달합니다. 이 함수는 한 번만 호출됩니다. setInterval에 대한 Javascript의 내부 컨트롤은 프로그래밍 된 시간 간격으로 () => Promise.all([myfunction()])
을 호출 할 때부터 지금까지 제어권을 얻는 것입니다.
코드를 식별하면 명확 해집니다.
var wait =
ms => new Promise(
r => setTimeout(r, ms)
);
var repeat =
(ms, func) => new Promise(
r => (
setInterval(func, ms),
wait(ms).then(r)
)
);
repeat(1000,() => Promise.all([myfunction()]))
.then(...);
기능을 중지하려면 간격의 ID를 캡처하고 SimpleJ가 지적한대로 clearInterval을 호출해야합니다. 일단 당신이 그걸 가지고 다닌다면 약속으로 이것을하기를 원할 것입니다. 따라서 완전한 예제는 다음과 같습니다 :
var intervalID = 0;
var wait =
ms => new Promise(
r => setTimeout(r, ms)
);
var repeat =
(ms, func) => new Promise(
r => (
intervalID = setInterval(func, ms),
wait(ms).then(r)
)
);
var myfunction =
() => new Promise(
r => r(console.log('repeating...'))
);
var stopAfter5Secs =
() => new Promise(
r => r(setTimeout(() => {
clearInterval(intervalID);
console.log('repeat end')
} , 5000))
);
repeat(1000,() => Promise.all([myfunction()])) // 1000 miliseconds = 1 second
.then(stopAfter5Secs()) // starts timer to end repetitions
.then(console.log('repeat start')); // informs that all actions were started correctly and we are waiting for them to finish
Promiss.all은 전달 된 인터 테이블 객체의 모든 promiss를 호출합니다. 이 경우 요소가 하나만있는 배열 (myfunction). 콘솔에 '반복'만 쓰는 간단한 함수를 만들었습니다. 그러나 모두가 약속을 되 돌리면 원하는 함수를 원하는만큼 전달할 수 있습니다.
현재 작업을 볼 수 있습니다 https://jsfiddle.net/9n2knxdg/7/
https://jsfiddle.net/daronwolff/n10n17ag/ –
화살표 표기법을 교체, "고전적인"ES 표기에 그들을 쓰기'입력 => doAthing'와'기능을 (입력) {doAthing}'을 확인한 다음 그 내용을 이해하는지 확인하십시오. –
이것은 일종의 비동기 폴링을위한 것입니까? "n 초마다 비동기 함수를 실행"하는 것과 같은가? – SimpleJ