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

标签:程序,页面,接口,数据,缓存 发布时间:2019年02月27日 点击1

小程序里面多个页面,偶然候会必要用到统一个接口的数据。而这些数据全局来说只必要拉取一遍,假如要存到缓存河北人事考试,要怎么保证其他页面取缓存的时候,数据已经拉取回来了呢?

多页面接口数据缓存实现


思路设计

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

在这里韩妆品牌,我们假设必要全局拉取一个用户信息。在涉及异步请求中,我们常用的体例是封装成一个Promise

  1. 方法同一对外返回一个Promise
  2. 加锁,在请求中不再请求,返回缓存的Promise
  3. 若已有缓存,则返回一个立刻resolvePromise
12345678910111213141516171819202122232425262728
let isLoading = false;let info = null;let promise = null;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: function (err) {        reject(err)      }    })  }));}

稍作优化

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

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

我们来更新下代码:

12345678910111213141516171819202122
let isLoading = false;let info = null;try {  info = wx.getStorageSync('info')} catch (e) {}let promise = null;export function getInfo(data = {}, needRefresh = false) {  if (info && !needRefresh) {    return new Promise((resolve, reject) => {      resolve(info);    });  }  if (isLoading) {    return promise;  }  isLoading = true;  return (promise = request({    url: "your_url",    method: "GET",    data  }));}

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

参考

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

结束语


前面我们也提到,小程序里面提议请求百度排名,都会经过 Native 提议。在应用开发实践中,对一些原理的掌握,许多时候能更多地提拔我们解决题目的服从,也能对项目团体有更好的认知。

手机网站建设