> 웹 프론트엔드 > JS 튜토리얼 > Javascript_jquery의 비동기 프로그래밍 사양 Promises/A에 대한 자세한 소개

Javascript_jquery의 비동기 프로그래밍 사양 Promises/A에 대한 자세한 소개

WBOY
풀어 주다: 2016-05-16 16:45:57
원래의
1005명이 탐색했습니다.

Javascript의 비동기 프로그래밍은 점차 모든 사람에게 받아들여지고 있습니다. 이전에는 일반적으로 콜백 중첩, setTimeout, setInterval 등을 통해 구현했습니다. 코드가 매우 직관적이지 않고 전체 코드 로직을 보지 않으면 빠르게 이해하기 어렵습니다. . Javascript의 비동기 함수에는 I/O 함수(Ajax, postMessage, img 로드, 스크립트 로드 등), 타이밍 함수(setTimeout, setInterval) 등이 포함될 수 있습니다.

복잡한 애플리케이션에는 여러 계층의 중첩이 있는 경우가 많고 심지어 일부 단계가 완료되지 않아 프로그램 예외가 발생하는 경우가 많습니다. 예를 들어 DOM에 노드를 삽입하는 경우입니다. 노드가 주입될 때까지 기다려야 합니다. 노드가 대량으로 주입되면 시간을 파악하기 어려운 경우가 많습니다. 우리 코드가 타사 API 데이터에 의존하는 경우. 우리는 API 응답의 지연 시간을 알 수 없으며 결과를 반환할 때까지 애플리케이션의 다른 부분이 차단될 수 있습니다. Promise는 비차단 기능을 갖추고 코드에서 완전히 분리되어 이 문제에 대한 더 나은 솔루션을 제공합니다.

자바스크립트의 비동기 프로그래밍을 먼저 살펴보겠습니다. 먼저 비교적 인기 있는 Promises/A 사양을 살펴보는 것이 좋습니다.

약속/사양

참고: 이해를 돕기 위해 설명은 Promises/A 사양과 다를 수 있습니다.

CommonJS의 Promises/A 사양은 API 인터페이스를 표준화하여 비동기 프로그래밍을 단순화하고 비동기 논리 코드를 더 쉽게 이해할 수 있도록 합니다.
Promise/A 사양을 따르는 구현을 Promise 객체라고 부릅니다. Promise 객체에는 미완료(미완료), 이행(완료), 처음 생성 시 실패(실패/거부), 미완료(미완료)라는 세 가지 상태만 있습니다. ) 상태인 경우 상태는 미이행(unfulfilled)에서 이행(completed)으로 또는 미이행(unfulfilled)에서 실패(failed/rejected)로만 변경될 수 있습니다. 상태가 이행(완료) 또는 실패(실패/거부)되면 상태를 다시 변경할 수 없습니다.

Promises/A 사양은 프로그램의 지연(또는 미래) 개념을 설명하기 위한 솔루션을 제공합니다. 주요 아이디어는 메소드를 실행한 다음 다른 메소드를 다시 호출하기 전에 결과가 반환될 때까지 기다리도록 애플리케이션을 차단하는 것이 아니라 향후 청취를 충족하기 위해 Promise 객체를 반환하는 것입니다. 이행 상태와 실패 상태를 모두 모니터링할 수 있습니다. Promise는 Promise 객체를 반환하는 then 인터페이스를 구현하여 콜백을 등록합니다.

코드 복사 코드는 다음과 같습니다.
그런 다음 (fulfilledHandler, errorHandler, ProgressHandler);

Then 인터페이스는 Promise의 다양한 상태를 모니터링하는 데 사용됩니다. fulledHandler는 이행(완료) 상태를 모니터링하는 데 사용되고, errorHandler는 실패(실패/거부) 상태를 모니터링하는 데 사용되며, ProgressHandler는 이행되지 않음(완료되지 않음) 상태를 모니터링하는 데 사용됩니다. Promise는 미완료(미완성) 이벤트 모니터링 구현을 강제하지 않습니다. 예를 들어 이전 버전의 jQuery(1.5, 1.6)의 Deferred는 Promise 구현이지만 미완료(미완성)에 대한 모니터링은 구현하지 않습니다. 상태를 확인하고 ProgressHandler를 호출합니다).

일반적으로 then 인터페이스는 원래 Promise 객체 대신 새로운 Promise 객체를 반환한다고 믿어집니다. 이 새로운 Promise 객체는 원래 Promise 객체의 뷰로 이해될 수 있습니다. 원래 Promise 객체의 상태를 관찰할 수만 있고 지연된 객체의 내부 상태를 변경할 수 없는 메서드입니다. 이렇게 하면 여러 호출자 간의 충돌을 방지할 수 있으며 여러 호출자가 다른 호출자에게 영향을 주지 않고 새 Promise 객체의 상태를 변경할 수 있습니다.

또한 Promise는 상태 전환을 구현하기 위해 해결(구현 상태가 미완료에서 완료로 변경됨) 및 거부(구현 상태가 미완료에서 거부 또는 실패로 변경됨)라는 두 가지 인터페이스를 제공합니다.

이해를 돕기 위해 사진 보내기:

Javascript_jquery의 비동기 프로그래밍 사양 Promises/A에 대한 자세한 소개

Promise를 사용하면 동기적 사고로 비동기 논리를 작성할 수 있습니다. 비동기 함수에서는 try/catch를 사용하여 예외를 포착하거나 예외를 발생시킬 수 없습니다. Promise를 사용하면 errorHandler를 직접 명시적으로 정의할 수 있으며 이는 예외를 잡는 것과 동일합니다.

다음은 Promises/A 사양을 따르는 여러 클래스 라이브러리(when, q, rsvp.js, jQuery.Deferred 등)입니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿