方案帖子地址:https://bbs.csdn.net/topics/392558819
简单描述一下需求场景:
页面同时并发多个相同的请求(即发送请求的代码是复用的),请求的响应时间不定(即后发请求的可能比先发的请求响应更快),需要做到每次只处理最后一次请求的响应结果。下面上代码:
class promiseContainer {
constructor() {
this.promise = null;
this.then = null;
}
addPromise (promise, then) {
let that = this;
that.promise = promise;
that.then = then;
promise.then((data) => {
if (promise === that.promise) {
that.then(data);
}
else {
console.log("cancel query");
}
});
}
}
let promiseObj = new promiseContainer();
promiseObj.addPromise(new Promise((resolve, reject) => {
//这里用setTimeout模拟ajax请求
setTimeout(() => {
//请求成功
if (true) {
resolve("complete");
}
//请求失败
else {
resolve("failed");
}
}, Math.random() * 2000)}),
function (data) {
if (data === "failed") {
console.log("request failed");
} else if (data === "complete") {
console.log("request success");
}
});
promise的终止实际上并不是终止了异步请求,而是可以根据我们的需要来选择是否需要执行请求完成后的动作。