fetch(url, {signal})
.then((response) => {
//do xxx
updateAutocomplete()
})
.catch((error) => {
//do xxx
handleError(error);
})
});
}
怎样实现实现promise的取消?
=================
方案1 - 借助reject 方法
我们都知道一个promise对象状态的改变是通过resolve和reject来执行的。那是不是可以借助reject方法来模拟呢?
上代码
//返回一个promise和abort方法
function getPromise() {
let _res, _rej;
const promise = new Promise((resolve, reject) => {
_res = resolve;
_rej = reject;
setTimeout(() => {
resolve(‘123’)
}, 5000);
});
return {
promise,
abort: () => {
_rej({
name: “abort”,
message: “the promise is aborted”,
aborted: true,
});
}
};
}
const { promise, abort } = getPromise();
promise.then(console.log).catch(e => {
console.log(e);
});
abort();
上面的方法可以正常执行,但是不够通用,可以将Promise构造函数内的逻辑提取出来,作为一个回调传进去。
改造一下
function getPromise(cb) {
let _res, _rej;
const promise = new Promise((res, rej) => {
_res = res;
_rej = rej;
cb && cb(res,rej);
});
return {
promise,
abort: () => {
_rej({
name: “abort”,
message: “the promise is aborted”,
aborted: true,
});
}
};
}
//主逻辑提取出来
function runCb(resolve,reject){
setTimeout(()=>{
resolve(‘1111’)
},3000)
}
const { promise, abort } = getPromise(runCb);
promise.then(console.log).catch(e => {
console.log(e);
});
方案2 - 借助 Promise.race() 方法
相信大家都知道race方法的作用,这里还是简单介绍下。
当有若干个promise, p1, p2, p3…在调用, let p = Promise.race([p1, p2, p3,…])的时候,返回的p也是一个promise。那么p什么时候会被resolve或者被reject呢?
看race我们知道它是竞速或赛跑的意思,所以p1, p2, p3 … 最先一个被resolve或者被reject的结果就是p的resolve或者reject的结果。所以后续的promise的resolve和reject都不会再被执行了。
代码很简单,其实够短小精悍。
//传入一个正在执行的promise
function getPromiseWithAbort§{
let obj = {};
//内部定一个新的promise,用来终止执行
let p1 = new Promise(function(resolve, reject){
obj.abort = reject;
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!