>  기사  >  웹 프론트엔드  >  es6의 Promise에 대한 자세한 소개

es6의 Promise에 대한 자세한 소개

零下一度
零下一度원래의
2017-06-26 15:23:451808검색

Promise

  1. Promise는 비동기 작업 메시지를 얻을 수 있는 객체입니다.

  2. 특징: 객체의 상태는 외부 세계의 영향을 받지 않습니다(보류 중, 해결 완료, 거부 실패). 비동기 작업의 결과는 현재 상태를 확인할 수 있습니다. 일단 상태가 변경되면 다시 변경되지 않습니다(보류 중에서 해결됨으로, 보류 중에서 거부됨으로만).

  3. 단점: 일단 생성되면 즉시 실행될 수 없습니다. 도중에 취소됩니다. 콜백 함수가 없으면 내부적으로 발생합니다. 오류는 외부에 반영될 수 없습니다. 대기 중이면 현재 진행 상황을 알 수 없습니다.

  4. 일반적으로 콜백을 정의하지 않습니다. then 메소드의 Reject 상태(즉, then의 두 번째 매개변수) 함수이지만, 이 메소드는 이전 then의 오류를 캡처할 수 있고 동기 쓰기 메소드(try/catch)에 더 가깝기 때문에 catch 메소드를 사용합니다. 메소드는 Promise 객체를 반환하므로 나중에 then 메소드를 호출할 수 있습니다. catch 메소드 중에서 오류가 발생할 수도 있습니다.

  5. Promise.all 메소드는 여러 Promise 인스턴스를 새 Promise 인스턴스로 패키징하는 데 사용됩니다. Promise.all 메소드는 배열이 아닐 수 있지만 반환된 각 멤버는 Promise 인스턴스입니다. p1 p2 p3 상태가 충족되는 경우에만 p 상태가 거부됩니다. , p는 거부됩니다.

  6. Promise.race도 다중이 됩니다. Promise 인스턴스는 객체의 상태가 변경되는 한 새 Promise로 패키징됩니다. 그에 따라 p의 상태도 변경됩니다. 첫 번째 변경된 개체가 반환되어 p의 콜백 함수로 전달됩니다.
  7. Promise.resolve는 개체를 Promise 개체로 변환하고 상태는 해결됩니다
  8. // 将thenable对象转为Promise对象var thenable = {
        then(resolve, reject) {
            resolve(200)
        }
    }var p = Promise.resolve(thenable)
    
    p.then((data) => {
      console.log(data)
    })  // 200

  9. Promise.reject는 Promise 개체를 반환합니다. 인스턴스 상태가 거부됩니다. 이 메소드의 매개변수는 거부 사유로 변경되지 않고 후속 메소드의 매개변수가 됩니다.

  10. 두 가지 추가 메소드
  11. // donePromise.prototype.done = function(onFulfilled, onRejected) {this.then(onFulfilled, onRejected)
            .catch(function(reason) {
                setTimeout(() => {throw reason}, 0)   
            });
    };// finallyPromise.prototype.finally = function (callback) {
        let P = this.constructor;return this.then(
            value  => P.resolve(callback()).then(() => value),
            reason => P.resolve(callback()).then(() => { throw reason })
        );
    };
  12. done은 언제든지 발생할 수 있는 오류를 포착하여 전역적으로 발생시키는 데 사용됩니다.

    마지막으로 Promise 객체의 상태에 관계없이 작업을 수행하고 공통 콜백을 허용합니다. 매개변수로서의 기능(실행해야 함)

위 내용은 es6의 Promise에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.