2017-12-31 10 views
0

기능 :DOM로드가 무기한 대기하는 방법은 무엇입니까?

window.addEventListener("DOMContentLoaded" , function(){}); 

또는

window.addEventListener("load" , function(){}); 

그것은 나를 빨리이 두 방법 사이에 약간의 특수성과 DOM로드와 같은 작업을 수행 할 수 있습니다.

"as soon as"

입니다하지만, 어떻게 DOM을로드, 무한정 기다릴 수 있습니까?

DOM을로드하기 만하면 함수가 실행됩니까? 내가 설명해 주겠다 : 나는 기능이 있다고 상상해보십시오.

cube cube = n => Math.pow (n, 3); 
if (document.readyState === 'complete') cube (3); 

코드에서 큐브 기능이 FUNDAMENTAL이라고 가정합니다.

그러나 DOM이로드되지 않은 경우 함수가 실행되지 않습니다. 그래서

, 어떻게 내가 무기한 DOM로드 될 때까지 기다린이 주요 기능에 대한 응답으로 역할을 다른 함수 (큐브)를 연기 할 수

그래서, 내 스크립트는 그 시점에 도달하고, DOM하지 않았다 경우 로드, 모든 그 기능은 어떤 가치도 없을 것입니다. 대신

내 초점 "이런 일이 발생하면 수행이"

은 다음과 같습니다

"이런 일이, 그리고이 일을 기다립니다"
+2

당신이 약속을 사용하여 고려했다 : 큐브()를 호출하여이 약속의 결심을 처리? –

+0

'document.addEventListener ('deviceready',() => {/ * 모든 것이로드됩니다. * /})'iirc,이게 작동합니다. –

답변

0

1 단계 : DOMContentLoaded 핸들러에서 변수를 볼 수 있도록 생성 그리고 귀하의 cube 함수에서. 그 값은 그 핸들러에 의해 해결 된 약속이어야합니다.

const DOMLoaded = new Promise((resolve, reject) => { 
    document.addEventListener("DOMContentLoaded", resolve); 
    // consider creating reject-on-timeout 
    // with something like setTimeout(reject, 60000 * 10); 
}); 

2 단계 : 예를 들어

DOMLoaded.then(() => cube(3)); 
+0

그래서, 이것은 무한정 기다리고 있습니까? 내가 거부를 적용하면 대기 시간은 최대 60000 * 10 초가됩니까? –

+0

1) 예, 2) 10 분. – raina77ow