前端的ajax缓存,js使用Promise实现简单的Ajax缓存_奔赴_前端开发者

本文介绍了如何在前端开发中利用Promise实现请求缓存,以确保如Token获取和配置信息接口只请求一次。通过封装Upload组件确保Token同步,并展示了fetchConfig函数的使用,确保配置信息的正确加载。讨论了错误处理、刷新机制等优化点,为前端应用提供了一种高效的数据获取策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务场景

在不少业务场景下,我们需要实现简单的请求缓存(即某个请求只发起一次请求),例如上传 Token 的获取、获取配置的接口等。

这些接口可以通过 Promise 实现简单的

示范代码

用七牛上传作例子,一般我们会把七牛上传封装为一个单独的 Upload 组件,外部只需要调用组件,而 token 的获取封装到组件内部实现。

//Upload.

上面是一个简单的

与直接

//

一个比较常见的 Upload 组件 的应用场景,在一个页面里同时使用多次该组件。

就上面的代码例子,如果使用

继续完善 Upload 组件

//Upload.

为了防止多个 Upload 组件 token 不同步问题,不再通过this.token保存 token,而是每次都等待 fetchToken resolved,保证获取到的 token 一定是最新的。

当然,这里还有很多需要优化,例如失败后的重试、判断是 401 失败才刷新 token、设置错误时间、定时刷新等等,但总体思路就是上面代码所展示的内容。

另外再介绍一个经典应用场景

const fetchConfig = (() => {

let configRequest = null;

return () => {

if (!configRequest) {

configRequest = Promise.all([services.customer.config1, services.customer.config2])

.then(([data1, data2]) => {

return { data1, data2 };

})

.catch(err => {

configRequest = null;

return Promise.reject(err);

});

}

return configRequest;

};

})();

export default {

async beforeRouteEnter(to, from, next) {

try {

// 配置信息仅需要成功请求一次

const [data, config] = await Promise.all([services.customer.getInfo(), fetchConfig()]);

next(vm => {

vm.data = data;

vm.config = config;

vm.init();

};

} catch (err) {

next(err);

}

}

};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持前端开发者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值