ajax 를 promise 형식 으로 포장 (1)
promise 의 원 리 를 체험 하기 위해 서, 나 는 스스로 ajax 를 promise 의 형식 으로 포장 할 계획 이다.주로 다음 과 같은 기능 을 실현 하 기 를 바 랍 니 다.
// 1. success error ,
promise.get(myUrl).success(successCallback1).error(errorCallback1).success(successCallback2).error(errorCallback2).error(errorCallback3).success(successCallback3);
// 2. myUrl, http 。
promise.get(myUrl1).success(successCallback1).get(myUrl2).error(errorCallback1).get(myUrl3).error(errorCallback2).success(successCallback1);
// 3. post jsonp 。
ajax 에 대해 서 는 jq 의 ajax 를 사용 하지만, 가능 한 한 jq 의 deferred 대상 을 사용 하지 않 습 니 다.이 박문 완성 기능 1, 기타 기능 은 다른 박문 에서 완성 합 니 다.
기능
처음 보 는 기능 1. 우 리 는 다음 과 같은 생각 이 있 습 니 다.
let Promise = function() {
this.eventName = {
success: [],
error: []
};
};
Promise.prototype.success = function(cb) {
this.eventName.success.push(cb);
return this;
};
Promise.prototype.error = function(cb) {
this.eventName.error.push(cb);
return this;
};
Promise.prototype.get = function(url) {
let that = this;
$.ajax({
url: url,
type: 'get',
timeout: 5000,
success: function (data, status) {
let successList = that.eventName.success;
if(successList || successList.length) {
for(let i = 0; i < successList.length; i++) {
successList[i](data, status);
}
}
},
error: function (err, status) {
let errorList = that.eventName.error;
if(errorList || errorList.length) {
for(let i = 0; i < errorList.length; i++) {
errorList[i](err, status);
}
}
}
});
return this;
};
그리고 우 리 는 실행 할 수 있다.
let successCallback1 = (data, status) => {
console.log(data);
}
let successCallback2 = (data, status) => {
console.log(data);
}
let errorCallback1 = (err, status) => {
console.log(data);
}
let errorCallback2 = (err, status) => {
console.log(data);
}
let url = 'xxxxxxxxxx';
let promise = new Promise();
promise.success(successCallback1)
.error(errorCallback1)
.error(errorCallback2)
.success(successCallback2)
.get(url);
그러나 이 는 get 방법 이 마지막 에 만 호출 되 고 앞 에 언급 할 수 없다 는 단점 이 있다.
어떻게 앞에서 언급 하여 아래 의 호출 형식 으로 바 꿉 니까?
promise.get(url)
.success(successCallback1)
.error(errorCallback1)
.error(errorCallback2)
.success(successCallback2);
사 고 는 setTimeout 을 사용 할 수 있 습 니 다. 테스트 코드 는 다음 과 같 습 니 다.
var Haha = function() {
this.a = [];
};
Haha.prototype.go = function() {
setTimeout(() => {
this.a.push(1);
let that = this;
setTimeout(() => {
that.a.push(2);
});
});
return this;
};
Haha.prototype.push = function(ele) {
this.a.push(ele);
return this;
};
var yaya = new Haha();
yaya.go().push(3).push(4);
// yaya.a, [3, 4, 1, 2]
그래서 유사 한 것 은 get 방법 을 다음 과 같이 수정 할 수 있 습 니 다.
Promise.prototype.get = function() {
setTimeout(() => {
let that = this;
$.ajax({
url: myUrl,
type: 'get',
timeout: 5000,
success: function (data, status) {
let successList = that.eventName.success;
if(successList || successList.length) {
for(let i = 0; i < successList.length; i++) {
successList[i](data, status);
}
}
},
error: function (err, status) {
let errorList = that.eventName.error;
if(errorList || errorList.length) {
for(let i = 0; i < errorList.length; i++) {
errorList[i](err, status);
}
}
}
});
}, 0);
return this;
}
눈대중 이 가능 하 니 나중에 시간 을 내 서 테스트 해 보 자.
다음으로 전송:https://www.cnblogs.com/yangzhou33/p/9961097.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.