Javascript 中,本身promise是不支持取消的,但是有时候,我们有些需求,希望能够取消。我们可以对异步请求进行封装,通过强制调用其reject,达到类似的取消操作。
function hello() {
let _res, _rej;
const promise = new Promise((res, rej) => {
_res = res;
_rej = rej;
setTimeout(() => {
res("Done");
}, 3000);
});
return {
promise,
abort: (opt = {}) => {
_rej({
name: "abort",
message: "the promise is aborted",
aborted: true,
...opt,
});
},
};
}
let myPromise = hello();
myPromise.promise.then(console.log).catch((e) => {
console.log(e);
});
myPromise.abort();