콜백 함수가 너무 깊고 병렬 로직을 일련의 실행해야한다는 것을 해결하십시오. 약속은 비동기 작업의 최종 결과를 나타냅니다. 약속과 상호 작용하는 주요 방법은 콜백 함수를 당시 () 메소드를 통해 약속의 최종 결과 값을받는 것입니다.
약속 관련 프로토콜에는 Promisea 및 Promisea+가 포함됩니다
수업 약속을 정의하십시오
속성 큐 큐를 정의하고 빈 배열을 초기화합니다 []
속성 값 값을 정의하고 null을 초기화하십시오
속성의 상태 상태를 정의하고 "보류중인"(기본값)를 초기화합니다.
멤버 메소드 정의 getqueue (), return attribute queue
멤버 정의 getStatus (), 속성 상태를 반환합니다
멤버 정의 메소드 setstatus (), set status, pass 매개 변수 : 상태, 값
상태가 충족되거나 거부 된 것으로 판단하고
상태 속성 설정 this.status = 상태입니다
값 속성을 설정하십시오. value = value || NULL, 값을 전달하지 않으면 NULL입니다.
동결 변수 freezeobject를 정의하십시오
정의 메소드는 현재 상태가 (완료)인지 판단하기 위해 isfulfilled ()입니다.
멤버 메소드 정의 isrerejected () 현재 상태가 (실패)인지 확인
멤버 정의 메소드 ispending (), 현재 상태 마스터가 결정됩니다 (대기)
멤버 메소드 정의 다음 (), Pass Parameters : On Upulfilled 성공적인 콜백, onrejected 실패 콜백
두 개의 콜백 함수를 정의합니다. 핸들러 객체, 속성이 충족되고 거부됩니다
핸들러 오브젝트의 지연된 속성 정의, 지연된 객체
현재 상태가 대기 중인지 결정하십시오. 대기중인 경우 핸들러 객체를 큐 큐 어레이에 넣으십시오.
대기 상태가 아닌 경우 utils 객체의 Process () 메소드를 호출하십시오. 매개 변수 : 상태,
return handler.deferred.promise 객체
연기 된 클래스 정의
속성 약속을 정의하고 약속 객체를 초기화하십시오
멤버 메소드 정의 resolve (), 매개 변수를 전달합니다. 결과 결과
약속 개체의 상태를 대기 대기로 결정하고 직접 반환하십시오.
큐 어레이를 얻으려면 약속 객체의 getqueue () 메소드를 호출하십시오.
루프 배열
// TODO는 도구 클래스 Utils를 호출합니다. Process () 메소드, 매개 변수 : "충족", 요소, ERR 정보
약속 객체의 setstatus () 메소드를 호출하고, 상태, 매개 변수를 설정하십시오 : '충족', 결과
멤버 메소드 정의 거부, PASS 매개 변수 : err 오류 메시지
약속 개체의 상태를 대기 대기로 결정하고 직접 반환하십시오.
큐 어레이를 얻으려면 약속 객체의 getqueue () 메소드를 호출하십시오.
루프 배열
// TODO, 도구 클래스 Utils를 호출하십시오. Procedure () 메소드, 매개 변수 : "거부", 요소, ERR 정보
약속 객체의 setstatus () 메소드를 호출하고, 상태, 매개 변수를 설정하십시오 : '충족', 결과
도구 클래스 유틸리티 정의, 익명 함수를 사용하여 즉시 실행하고 개체를 얻습니다.
객체를 반환하고 객체에 메소드 프로세스 ()가 있습니다.
Process () 메소드 정의, 패스 매개 변수 : 유형 상태 유형, 핸들러 프로세서 어레이, 결과 결과
처리 기능 기능을 가져와 핸들러에서 [유형]
내가 여기 왔을 때 나는 현기증이었다. . .
사용 방법 :
함수를 정의하고 매개 변수 : URL 경로를 전달하십시오
연기 된 물체를 얻고 새로 나옵니다
데이터를 반환하는 콜백 메소드에서 Ajax의 데이터를 요청하는 코드
지연된 객체의 resolve () 메소드가 성공적으로 호출되는 경우, 매개 변수 : return data
지연된 객체의 Reject () 메소드가 실패한 경우, 매개 변수 : returned data
Deferred.promise 객체를 반환하십시오
ajax () 메소드를 호출하여 약속 객체, 매개 변수 : URL,
Promise Object, 매개 변수 : 익명 함수의 당시 () 메소드를 호출하십시오.
약속 객체를 얻고이 개체를 반환하려면 ajax () 메소드를 호출하십시오.
체인 호출을 형성하십시오
JS 부분 :
<cript> // 약속 코드 부품 (개 벨트를 선택했습니다) 약속 = function () {this.queue = []; this.value = null; this.status = 'pending'; // 거부 된 이행}; promise.prototype.getqueue = function () {return this.queue;}; promise.prototype.getStatus = function () {return this.status;}; promy.prototype.setStatus = function (s, value) {if '| | s = s = s = s = rejected'). this.status = s; this.value = value || 널; this.queue = []; var freezeobject = object.freeze || 기능(){}; freezeobject (this); // 약속의 상태는 돌이킬 수 없습니다} else {throw new error ({메시지 : "상태를지지하지 않습니다 :" + s}); }}; promise.prototype.isfulfilled = function () {return this.status === 'fulfled';}; promise.sprototype.isrerejected = function () {return this.status === '거부 된';} promy.ispending = function () {return this.status === 'promy.prot'; 함수 (onfulfilled, onrejected) {var handler = { 'fulfled': onfulfilled, '거부': onrejected}; handler.deferred = new Deferred (); if (! this.ispending ()) {// 이것은 약속 상태를 먼저 변경 한 다음 콜백을 추가 할 수 있습니다. } else {this. procedure = {var funcer = handler.deferred (var newresult = func); Newresult.then (함수 (data) {// def.resolve (data); //}, function (err) {// def.reject (err); //}; // X가 충족되면 같은 값으로 약속을 지정하십시오. // X가 같은 이유로 약속을 거부합니다. {def, err) {def, type, result); '보류') {새 오류 ({ 'message': " + type}}}; } var queue = this.promise.getqueue (); for (var i = 0, len = queue.length; i <len; i ++) {utils.procedure ( 'fulfled', queue [i], result); } this.promise.setStatus ( 'fulfled', result);}; deferred.prototype.reject = function (err) {if (! this.promise.ispending ()) {return; } var queue = this.promise.getqueue (); for (var i = 0, len = queue.length; i <len; i ++) {utils.procedure ( '거부', 큐 [i], err); } this.promise.setstatus ( '거부', err);}/***************************************************************************************************************************** // function (url) {var def = new Deferred (); var xhr = 새로운 xmlhttprequest (); XHR.OnreadyStateChange = function () {if (xhr.readystate === 4) {if ((xhr.status> = 200 && xhr.status <300) || xhr.status === 304) {def.resolve (xhr.responsetext) {// new ajax, no replybly ajax 오류 ({메시지 : xhr.status}); }}}}}; xhr.open ( 'get', url, true); xhr.send (null); return def.promise;} ajax ( 'test.php? act = 1'). 다음 (함수 (data1) {console.log (data1)); // data1 return ajax ( 'test.php? act = 2');}). {console.error (err);}). 그런 다음 (함수 (data3) {console.log (data3); alert ( 'success');}, function (err) {console.error (err);}); </script>PHP :
<? phpif ($ _ get [ 'act'] == 1) {echo json_encode (array ( "code"=> 200));} else if ($ _ get [ 'act'] == 2) {echo json_encode (array ( "code"=> 300)); json_encode (배열 ( "code"=> 400));}JavaScript 약속의 간단한 학습과 사용에 대한 위의 요약은 내가 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.