나는 몇 가지 기능을 하나씩 재귀 적으로 호출하고 싶습니다 setTimeout
.
var flag = 0 ;
function slave1(){
if(flag < 60) {
var COPY_PO_LINE_DIV = document.getElementById("DOM_ELEMENT1"); // Checking if DOM has loaded or not. If yes then doing something.
if (COPY_PO_LINE_DIV != null) {
flag = 0;
//doing something
} else {
setTimeout(slave1,2000); //waiting for 2 seconds and checking again.
}
}
}
//doing similar task
function slave2(){
if(flag < 60) {
var COPY_PO_LINE_DIV = document.getElementById("DOM_ELEMENT2");
if (COPY_PO_LINE_DIV != null) {
flag = 0;
//doing something
} else {
setTimeout(slave2,2000);
}
}
}
function master() {
slave1();
console.log("Without completing slave1 function.");
slave2();
}
master()
함수를 통해 여러 함수를 차례로 호출하고 싶지만 현재 상황에서는 slave2()
완료하지 않고 호출 slave1()
합니다. slave1()
실행이 완료 되었는지 어떻게 확인할 수 있습니까 ? DOM 요소가로드되지 않은 경우 2 초마다 60 번 실행해야 slave1()
하고 다음 요소 에서 나와서 다음 요소로 이동 해야합니다 .
다음 함수로 컨트롤을 반환하지 않고 dom 요소가로드되지 않으면 동일한 함수를 60 번 실행하고 싶습니다.
slave1
완료되면 콜백을 실행 하도록 조정해야 합니다 slave2
.
function slave1(callback){
if(flag < 60) {
var COPY_PO_LINE_DIV = document.getElementById("DOM_ELEMENT1"); // Checking if DOM has loaded or not. If yes then doing something.
if (COPY_PO_LINE_DIV != null) {
flag = 0;
//doing something
callback();
} else {
setTimeout(slave1,2000); //waiting for 2 seconds and checking again.
}
}
}
function slave2(){...}
function master() {
slave1(slave2);
console.log("Without completing slave1 function.");
}
이것이 기본적인 자바 스크립트 체인입니다. 더 많은 슬레이브 가 있다면 살펴보고 싶을 수도 있습니다. async.series
그렇지 않으면 Gabs00이 멋지게 넣은 콜백 지옥으로 이동합니다.
slave1(function(){
slave2(function(){
slave3(function(){
slave4(slave5);
});
});
});
콜백에 값을 전달해야하는 경우 해당 인수로 의도 된 콜백을 차례로 호출하는 중간 익명 함수를 사용해야합니다. 이렇게하려면 인수를 사용하도록 함수를 정의해야합니다.
function slave1(str, callback){...}
function slave3(i, callback){...}
slave1("some argument", function(){
slave2("another argument", function(){
slave3(1, function(){
slave4(2, slave5);
});
});
});
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다