ES6의 약속에 대해 배우기

hzc
풀어 주다: 2020-06-29 10:25:27
앞으로
2277명이 탐색했습니다.

Promise의 시작

JavaScript의 비동기 메커니즘으로 인해 일반적인 문제는 콜백 피라미드입니다.

loadImg('a.jpg', function() {
    loadImg('b.jpg', function() {
        loadImg('c.jpg', function() {
            console.log('all done!');
        });
    });
});
로그인 후 복사

Promise 말 그대로 약속입니다. A가 B를 호출하고 B가 A에게 약속을 반환하면 A는 다음과 같이 계획을 작성할 수 있습니다. B가 나에게 결과를 반환하면 A는 S1 계획을 실행합니다. 그렇지 않으면 B가 A에게 원하는 결과를 제공하지 않습니다. 이유, 그러면 A는 비상 계획 S2를 실행합니다. 이 경우 모든 잠재적 위험은 A의 통제 내에 있습니다. , 질문자가 예상치 못한 응답을 할 때마다 다른 처리 메커니즘이 사용됩니다. Promise 사양에서는 이를 요구하지 않지만 처리를 전혀 수행하지 않거나(두 번째 then 매개변수를 전달하지 않고) 균일하게 처리할 수도 있습니다.

Promise/A+ 사양

Promise는 세 가지 상태로 존재할 수 있습니다: 대기

(보류 중)
    , Completed
  • (이행)

    , 거부됨(거부됨) Promise의 상태는 다음과 같을 수 있습니다. "대기 중"에서 "완료" 또는 "거부됨"으로 변경되었으며 되돌릴 수 없습니다.

  • Promise는 then 메소드

    (then이 Promise의 핵심입니다)
  • 를 구현해야 하며, 그런 다음 Promise를 반환해야 합니다. 그러면 promise는 여러 번 호출될 수 있으며 콜백은 정의된 것과 동일한 순서로 실행됩니다.
  • Then 메서드는 두 개의 매개변수를 받습니다. 첫 번째 매개변수는 성공할 때의 콜백이고, 다른 하나는 실패할 때의 콜백입니다. 그런 다음 전달된 또 다른 약속을 받아들일 수 있고, "그때처럼" 개체나 메서드도 받아들일 수 있습니다. ", 이것이 가능한 개체입니다

  • Standard Promise

  • html5rocks의 JavaScript Promises 기사를 참조할 수 있습니다. 현재 Chrome 및 Firefox와 같은 고급 브라우저에는 Promise 개체가 내장되어 있어 Promise와 같은 더 많은 작업 인터페이스를 제공합니다. all()
은 약속 배열 전달을 지원하고 모든 약속이 완료되면 실행됩니다. 일상적인 비동기 프로그래밍을 처리하는 데 충분할 더 친숙하고 강력한 예외 캡처도 있습니다.

타사 라이브러리의 약속


오늘날 인기 있는 대부분의 주요 js 라이브러리는 dojo, jQuery, Zepto, when.js, Q 등과 같이 다양한 수준으로 Promise를 구현하지만 대부분은 Deferred입니다

Epilogue


Promise의 구현이 아무리 복잡하더라도 사용법이 매우 간단하고, 정리된 코드가 매우 명확하며, 더 이상 콜백으로 인해 어려움을 겪을 필요가 없다는 것을 알 수 있습니다.

마지막으로, 약속은 정말 우아합니다! 그러나 Promise는 콜백의 깊은 중첩 문제만 해결합니다. 실제로 JavaScript 비동기 프로그래밍을 단순화하는 것은 Generator입니다. Node.js 측에서는 Generator를 고려하는 것이 좋습니다.

추천 튜토리얼: "

JS Tutorial
"

위 내용은 ES6의 약속에 대해 배우기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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