우리는 예를 살펴, 다음, 결국 연기 지연된와 함께 사용 jquery1.5 후 무엇을 말하고
var에 대기 = 함수 () { var에 작업 = 함수 () { 을 console.log ( '执行完成' ); } 에서는 setTimeout (작업, 2000 ); } ) (기다려;
작업 실행이 완료되면 이제 일부 특히 복잡한 작업은 코드 내부의 많은 수 있습니다. 어떻게 그렇게 할 수 있습니다. 다음에 계속해서 쓸 경우 문제가되지 않지만 오픈 폐쇄 원칙에 맞지 않습니다. 이 여러 번 다음 코드를 많이 변경 될 수 있습니다 뒤에. 개방 수정은 떨어져 확장합니다. 우리는 팽창, 수정에 대한 폐쇄 개방 실현해야합니다.
이 문제를 해결하기 위해, 우리는 지연된 jQuery를 소개합니다
기능 WaitHandle이 () { var에 DTD .Deferred = $ (); // 지연된 객체가 생성 VAR 대기 = 기능 (DTD는) { //이 지나가는 객체가 지연됩니다 필요 VAR의 작업 = 함수 () { 을 console.log ( '실행 완료 ' ); dtd.resolve (); // 비동기 작업이 완료되었습니다 // dtd.reject을 (); // 나타내는 비동기 작업이 실패하거나 오류 } 에서는 setTimeout (작업, 2000 ); 반환 DTD를; // 연기 된 자리로 돌아 요청 그게 } // 이 값이 반환해야합니다 반환 , 대기 (DTD)를 }
그리고 세 가지 기능이 있으며, 첫 번째 함수는 WaitHandle이 층이고, 제 2 층은 대기 기능, 제 3 층의 기능은 작업이된다. 두 반환, 첫 번째 한에 전달할 수 있습니다. 그런 다음 처리의 시리즈와 DTD를 반환합니다. 그리고 마지막으로 사용하는 방법
VAR = w WaitHandle이 (); w.then ( 함수 () { CONSOLE.LOG ( 'success1' ); } 함수 () { CONSOLE.LOG ( '오류' ); }) 그 때는 ( 함수 () { CONSOLE.LOG ( 'success2' ) } , 함수 () { CONSOLE.LOG ( '있고 Error2' ) }); // 还有w.done和w.fail
개요, API가 두 가지 범주로 나눌 수 있습니다 DTD, 다른 의도
첫 번째 범주 : dtd.resolve dtd.reject
두번째 카테고리 : dtd.then dtd.done dtd.fail
이 두 종류로 구분한다, 그렇지 않으면 그 결과는 심각 할 것이다!
상기 예에서, 코드는 최종 성능 dtd.reject (). 결과를보십시오. .
기능 WaitHandle이 () { var에 DTD .Deferred = $ (); // 지연된 객체가 생성 VAR 대기 = 기능 (DTD는) { //이 지나가는 객체가 지연됩니다 필요 VAR의 작업 = 함수 () { 을 console.log ( '실행 완료 ' ); dtd.resolve (); // 비동기 작업이 완료되었습니다 // dtd.reject을 (); // 나타내는 비동기 작업이 실패하거나 오류 } 에서는 setTimeout (작업, 2000 ); 반환 DTD를; // 연기 된 자리로 돌아 요청 그게 } // 이 값이 반환해야합니다 반환 , 대기 (DTD)를 } var에 = W를WaitHandle이 (); w.reject () // 非常不老实的做法 w.then ( 함수 () { CONSOLE.LOG ( 'success1' ); } 함수 () { CONSOLE.LOG ( '오류' ); }). 다음 ( 함수 () { CONSOLE.LOG ( 'success2' ) } 함수 () { CONSOLE.LOG ( '있고 Error2' ) });
그래서이 문제를 해결하는 방법, 그것은 가장 중요한 역할은 매우 유사 약속에 리드;
기능 WaitHandle이 () { var에 DTD .Deferred = $ (); // 지연된 객체가 생성 VAR 대기 = 기능 (DTD는) { //이 지나가는 객체가 지연됩니다 필요 VAR의 작업 = 함수 () { 을 console.log ( '실행 완료 ' ); dtd.resolve (); // 비동기 작업이 완료되었습니다 // dtd.reject (); // 비동기 작업이 실패 표시 또는 오류 } 에서는 setTimeout (작업, 2000 ); 반환 dtd.promise (); // 돌아 가기 약속, 오히려 deferreds로 돌아보다는 } // 이 값이 반환해야합니다 반환 대기 (DTD를); } VAR = w WaitHandle이 (); w.then ( 함수 () { CONSOLE.LOG ( 'success1' ); } 함수 () { CONSOLE.LOG ( '오류' ); }). 다음 ( 함수 () { CONSOLE.LOG ( 'success2' ) } , 함수 () { CONSOLE.LOG ( '있고 Error2' ) });
이 약속 () 메서드를 호출하지만, 이미 약속을 초기 개념을 제안하고 있지만,이 jquery1.5 시간입니다. 약속을 반환 한 후, 학생들이 시간이 나 w.reject () 오류를 변경합니다. 약속을 반환 한 후, 다음 메소드는 거부 결의를 변경하지 않는, 실패, 수행,들을 수 있습니다. 모니터 할 권리는 단지 다른 학생들입니다.