JavaScript 비동기 프로그래밍의 핵심 사항
이 기사는 콜백 함수, 약속 및 비동기/대기하는 세 가지 주요 방법을 다루며 이해하기 쉬운 방식으로 JavaScript 비동기 프로그래밍을 논의합니다. 샘플 코드, 키 포인트 요약 및 심층 학습 리소스 링크를 통해 JavaScript 비동기 프로그래밍의 핵심 개념을 마스터하는 데 도움이됩니다.
내용 요약 :
단일 스레드 처리
콜백 함수를 사용하여 비동기 조작 를 구현하십시오
콜백 지옥
약속
Async 체인 호출
약속의 미래?
> Async/Await
약속의 업그레이드
try/catch의 한계
JavaScript 비동기 프로그래밍 여행
JavaScript의 비동기 특징
JavaScript는 종종 "비동기"언어라고합니다. 그게 무슨 뜻입니까? 개발에 어떤 영향을 미칩니 까? 최근 몇 년 동안 그 방법에서 어떤 변화가 있었습니까?
다음 코드를 고려하십시오
대부분의 언어는 모든 코드 라인을 동시에 처리합니다. 첫 번째 줄은 결과를 실행하고 반환하며 첫 번째 줄은 첫 번째 줄에 걸리는 시간에 관계없이 첫 번째 줄이 완료된 후에 만 실행됩니다.
단일 스레드 처리
JavaScript는 단일 스레드에서 실행됩니다. 브라우저 탭에서 실행되면 다른 모든 작업이 중지됩니다. 이는 Page Dom에 대한 변경이 병렬 스레드에서 발생할 수 없기 때문에 다른 스레드가 다른 URL로 리디렉션되면 위험합니다.
사용자는 처리가 작은 블록으로 빠르게 진행되므로 사용자는 거의 알지 못합니다. 예를 들어, JavaScript는 버튼 클릭을 감지하고 계산을 실행하며 DOM을 업데이트합니다. 완료되면 브라우저는 큐에서 다음 항목을 처리 할 수 있습니다.
(참고 : PHP와 같은 다른 언어도 단일 스레드를 사용하지만 다중 스레드 서버 (예 : Apache)에서 관리 할 수 있습니다. 동일한 PHP 페이지에 대한 두 개의 동시 요청은 두 개의 스레드를 시작하고 실행할 수 있습니다. PHP 실행 검역 인스턴스
콜백 함수를 사용하여 비동기 조작
를 구현하십시오
단일 스레딩은 문제가 발생합니다. JavaScript가 서버의 브라우저 또는 데이터베이스 작업의 AJAX 요청과 같은 "느린"프로세스를 호출하면 어떻게됩니까? 이 작업은 몇 초 또는 몇 분이 걸릴 수 있습니다. 응답을 기다리는 동안 브라우저가 잠겨 있습니다. 서버에서 Node.js 응용 프로그램은 추가 사용자 요청을 처리 할 수 없습니다.
솔루션은 비동기 처리입니다. 완료를 기다리는 대신 결과가 준비되면 다른 기능을 호출하도록 프로세스를 지시합니다. 이것을 콜백 함수라고하며, 이는 비동기 기능에 대한 인수로 전달됩니다.
예 :
dosomethingAsync 함수는 콜백 함수를 인수로 받아들입니다 (함수에 대한 참조 만 전달하므로 오버 헤드가 작습니다). DosomethingAsync가 얼마나 오래 걸리는지는 중요하지 않습니다. 콘솔이 표시됩니다 :
튜토리얼은 종종 전체 약속 체인이 비동기식이라고 언급하지 않습니다. 일련의 약속을 사용하는 모든 함수는 자체 약속을 반환하거나 Final , 또는 메소드에서 콜백 함수를 실행해야합니다.
약속의 구문은 일반적으로 오류가 발생하기 쉬운 장소가있는 콜백 함수보다 일반적으로 더 복잡하며 디버깅도 번거 롭습니다. 그러나 기본 사항을 배우는 것이 중요합니다.
당신은 약속에 대해 더 많이 읽을 수 있습니다 : javaScript Promise 개요
Async/Await
약속은 어려울 수 있으므로 ES2017은 비동기를 소개하고 기다립니다. 단지 구문 설탕 일 수 있지만, 약속을 쉽게 사용할 수 있으며 체인을 완전히 피할 수 있습니다. 다음 약속 기반 예를 고려하십시오
.then()
Async/Await을 사용 하여이 코드를 다시 작성하려면 :
.catch() 외부 함수는 비동기 문으로 시작해야합니다
다음 명령을 실행하기 전에 처리가 완료되도록 약속 기반 함수를 비동기로 시작해야합니다.
.finally()
는 JavaScript에서 단일 스레드 처리를 수행하지 않고 각 통화가 동기식으로 나타납니다. 또한 비동기 함수는 항상 약속을 되돌리므로 다른 비동기 기능에 의해 호출 될 수 있습니다.