加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

小程序多页面接口数据缓存

发布时间:2020-12-14 19:23:26 所属栏目:资源 来源:网络整理
导读:小程序里面多个页面,有时候会需要用到同一个接口的数据。而这些数据全局来说只需要拉取一遍,如果要存到缓存,要怎么保证其他页面取缓存的时候,数据已经拉取回来了呢? 多页面接口数据缓存实现 思路设计 其实这种场景和实现方式,与小程序关系并不大,很多

小程序里面多个页面,有时候会需要用到同一个接口的数据。而这些数据全局来说只需要拉取一遍,如果要存到缓存,要怎么保证其他页面取缓存的时候,数据已经拉取回来了呢?

多页面接口数据缓存实现


思路设计

其实这种场景和实现方式,与小程序关系并不大,很多常见的应用开发都会遇到。这次刚好在小程序里用到了,就顺便做下记录。

在这里,我们假设需要全局拉取一个用户信息。在涉及异步请求中,我们常用的方式是封装成一个Promise

  1. 方法统一对外返回一个Promise
  2. 加锁,在请求中不再请求,返回缓存的Promise
  3. 若已有缓存,则返回一个马上resolvePromise
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
let isLoading = false;
let info = null;
let promise = export function getInfo(data = {}) {
if (info) {
return new Promise((resolve,reject) => {
resolve(info);
});
}
if (isLoading) {
return promise;
}
isLoading = true;
return promise = new Promise((resolve,reject) => {
//登录权限接口
wx.request({
url: "your_url",
method: "GET",
data,
success: function (res) {
resolve(res)
},
fail: err) {
reject(err)
}
})
}));
}

稍作优化

这种情况下,我们在一个生命周期中都会只请求一次,其他都只会在缓存中获取。我们还可以做些调整:

  1. 将数据写入本地缓存,小程序启用的时候获取。
  2. 提供强制拉取新数据的配置控制,这里用needRefresh参数控制。
  3. 使用上节《小程序的登录与静默续期》封装的request方法来发起请求。

我们来更新下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
)
} catch (e) {}
data = {},needRefresh = false) {
if (info && !needRefresh) {
return (promise = request({
url: method: data
}));
}

Tips:前面也提到过,小程序的设计很大程度上考虑了管控力。在这里,为了保证小程序不乱用任意域名的服务,wx.request请求的域名需要在小程序管理平台进行配置,如果小程序正式版使用wx.request请求未配置的域名,在控制台会有相应的报错。

参考

  • 小程序网络API
  • 《小程序开发指南》

结束语


前面我们也提到,小程序里面发起请求,都会经过 Native 发起。在应用开发实践中,对一些原理的掌握,很多时候能更多地提升我们解决问题的效率,也能对项目整体有更好的认知。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读