jquery에서 비동기 처리 함수를 여러 건 호출하는데
여러 개의 비동기 함수들을 한 번에 처리해야 하려면 어려운 점이 많습니다.
이럴 때 jquery deferred를 사용하면 쉽게 해결할 수 있습니다.
testFnc1 함수는 setTimeout으로 1초 뒤에 deferred resolve를 실행하고 혹시 예외가 발생되면 deferred reject를 실행합니다.
testFnc2와 testFnc3도 시간 차이만 있지 testFnc1와 똑같이 실행합니다.
그리고 testDfd 함수는 testFnc1, testFnc2, testFnc3을 순차적으로 실행시켜
모두 정상적으로 끝나면 done을 실행하고
testFnc1, testFnc2, testFnc3 중 하나라도 예외가 발생하면 fail을 실행합니다.
testDfd의 done 함수 파라미터를 보면 res1, res2, res3는 각각 testFnc1, testFnc2, testFnc3의 resolve의 파라미터를 받습니다.
testDfd의 fail 함수의 파라미터는 testFnc1, testFnc2, testFnc3 중 reject의 파라미터를 받습니다.
예제로 간단히 작성한 코드라서 의미가 없다고 생각할 수 있지만
setTimeout 대신 ajax를 생각한다면 개발하는데 도움이 많이 될 것입니다.
위에서 굵은 글씨로 작성했듯이 여러 건의 비동기 함수들을 한 번에 처리하는 경우 외에
단순히 비동기로 처리해야 하는 경우라면 deferred를 쓸 필요가 없을 거 같습니다.
아니면 예외처리에서 reject 대신에 resolve를 사용해서 따로 처리하는 방법도 있을 거 같습니다.
'dev > 자바스크립트' 카테고리의 다른 글
javascript async await (0) | 2023.02.10 |
---|---|
excel download (0) | 2022.05.22 |
브라우저 현재 위치 조회 (0) | 2021.12.24 |
배열 추가 삭제 (0) | 2021.09.17 |
정규표현식 전화번호 체크 (0) | 2021.07.27 |