홈>
일정 시간이 지난 후에 작업을 실행할 스크립트를 만들고 있습니다. 사용자가 이러한 작업의 실행을 취소 할 수 있기를 바랍니다. 시간 초과를 목록에 저장하여 모든 시간 초과를 취소하는 데 사용하면됩니다. 하지만 타임 아웃이 정상적으로 완료되면 여전히 해당 목록에 저장됩니다.
제한을 시도하기 전에 타임 아웃이 이미 완료 또는 취소되었는지 어떻게 확인합니까?
var timeouts = [];
$(document).on('click', '.doTask', function() {
var timeout = setTimeout(() => {
doTaskAfter();
}, 10000);
timeouts.push(timeout);
});
$(document).on('click', '.cancelTasks', function() {
var i = timeouts.length;
while (i--) {
if (timeouts[i].finished || timeouts[i].timeoutCleared) { // How to I check this?
clearTimeout(timeouts[i]);
}
timeouts.splice(i, 1);
}
});
-
답변 # 1
-
답변 # 2
올바로 이해했는지 모르겠지만 이미 완료된 시간 초과를 제거하는 이유는 무엇입니까?
시간이 초과되면 배열에서 자신을 제거 할 수 있습니다.
timeouts.splice(timeouts.indexOf(timeout), 1);
clearTimeout
를 사용할 수 있습니다 그리고splice
제한 시간 목록에서 등록/실행 제한 시간을 모두 종료합니다.var timeouts = []; $(document).on('click', '.doTask', function() { var timeout = setTimeout(() => { doTaskAfter(); timeouts.splice(timeouts.indexOf(timeout), 1); // <=== HERE }, 10000); timeouts.push(timeout); }); $(document).on('click', '.cancelTasks', function() { var i = timeouts.length; while (i--) { clearTimeout(timeouts[i]); timeouts.splice(i, 1); } });
-
답변 # 3
중요하거나 중요하지 않은 한 가지는
clearTimeout
에 전화하는 것입니다 이미 지워지거나 완료된 시간 초과시 아무 작업도 수행하지 않으므로 시간을 추적하지 않아도됩니다.그렇지 않으면 다음과 같이 상태를 추적 할 수 있습니다.
var timeouts = []; $(document).on('click', '.doTask', function() { var timeout = { state: 'waiting' }; timeout.id = setTimeout(() => { timeout.state = 'finished'; doTaskAfter(); }, 10000); timeouts.push(timeout); }); $(document).on('click', '.cancelTasks', function() { var i = timeouts.length; while (i--) { if (timeouts[i].state !== 'finished' && timeouts[i].state !== 'canceled') { // i.e. timeouts[i].state is 'waiting' clearTimeout(timeouts[i].id); timeouts[i].state = 'canceled'; } timeouts.splice(i, 1); } });
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- vue.js - axios를 사용하여 서버에 이미지를 업로드하는 방법
- python - 문자열에서 특정 문자 제거
약속으로 할 수 있다고 생각합니다.
타이머를 생성하고 약속 안에 넣은 다음 그 약속을 배열에 넣습니다. 타이머가 실행되면 약속이 해결됩니다.
말 그대로 타이머를 작성하십시오.
여기서 할 수있는 일은 이것입니다. 코드를 살펴볼 때는 promise.race와 함께 false를 반환하는 두 번째 약속을 사용하십시오.
약속이 해결되었는지 확인하려면 Promise.race를 사용하십시오. 둘 다 해결되면 Promise.race가 첫 번째 약속을 반환하고 "True"를 반환하기 때문에 작동합니다. 타이머가 여전히 꺼져 있으면 false를 반환합니다.