2017-12-29 40 views
1

매초 update() 함수를 실행하고 싶다고 가정 해 봅시다.setInterval 대신 JavaScript async 사용

나는 두 가지 방법으로이 작업을 수행 할 수 있습니다

async function interval() { 
    await new Promise((res, req) => { 
    setTimeout(res, 1000) 
    }) 
    update() 
    interval() 
} 

또는

setInterval(update, 1000) 

둘 사이의 기능적 차이가 있습니까?

+1

당신이 약속을 사용하는 경우이 간격을 잡을 수 있습니다.'간격() 잡기 (ERR => ...)'당신은'setInterval'을 취소 할 수 있지만,'Promise'을 취소하지 못할 – HMR

+1

구현 –

답변

0

차이점은 사용자의 interval 함수가 완료 될 때 약속을 반환한다는 것입니다. 당신은 정말 제대로 작동하는지 불구하고 return을 추가해야합니다

async function interval() { 
    await new Promise((res, req) => { 
    setTimeout(res, 1000) 
    }) 
    update() 
    return interval() 
//^^^^^^ 
} 

update 예외를 throw 할 때 이제 약속을 거부하고 오류를 .catch() 수 있습니다. 또한 setInterval과는 달리 interval 재귀 호출은 실행을 중지합니다. 여기 asycn 전혀 관련이없는

당신의 질문은 반복을 달성하기 위해에서는 setTimeout과 setInterval을의 차이를 요구하고있다
async function interval() { 
    while (true) { 
    await new Promise((res, req) => { 
     setTimeout(res, 1000) 
    }) 
    update() 
    } 
} 
+0

업데이트가 예외를 throw 할 때 약속이 거부되지 않음 !, 약속이 업데이트 기능과 연결되어 있지 않음 –

+0

@AkshayVijayJain 물론 그렇습니다! 'interval()'에 의해 반환 된 약속은 몸체 안의 어떤 코드라도 예외를 던질 때 거부됩니다. 'update()'호출을 포함한다. – Bergi

+0

왜 interval()이 약속을 되 돌리는가? –

0

, 나는 느낌 :

또한 async/await 구문은 루프를 만들 재귀를 방지 할 수있는 장점이있다/setTimeout에서 같은 함수를 호출하는 것을 피하기 위해 방금 사용했습니다.

아니면 관련성이 말할 수 비동기/await를가
그래서 다음 링크 대답 할 수 당신의 setTimeout
으로 얻을 루프를 취소 Ayush에 의해 지적,의 setTimeout이 무엇을, 그러나, 당신은 어떤 옵션이 없습니다하고있다 너의 호기심.
setTimeout or setInterval?

감사