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

答案是多页面接口数据缓存实现。

思路设计

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

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

  1. 方法统一对外返回一个Promise。
  2. 加锁,在请求中不再请求,返回缓存的Promise。
  3. 若已有缓存,则返回一个马上resolve的Promise。

稍作优化

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

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

我们来更新下代码:

Tips:前面也提到过,小程序的设计很大程度上考虑了管控力。

在这里,为了保证小程序不乱用任意域名的服务,wx.request请求的域名需要在小程序管理平台进行配置,如果小程序正式版使用wx.request请求未配置的域名,在控制台会有相应的报错。

参考

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

结束语

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

文章来源:腾讯工程师 王贝珊

multiprocessing.queue取数据要加锁么_干货 | 小程序多页面接口数据缓存相关推荐

  1. 前端wxml取后台js变量值_微信小程序云开发教程WXML入门数据绑定

    同学们大家好,我是小伊同学,今天带领大家学习WXML部分一个重要的知识点,数据绑定. 简单来讲,数据绑定就是通过双重花括号将一个变量绑定到界面上. 首先,我们为什么要将变量绑定到页面上呢?因为在制作一 ...

  2. 微信小程序之获取接口数据展示

    上篇说到获取编辑框文本,没看过去看看. 本片介绍简单的接口数据获取,并且展示,采取模拟数据,拉取数据方式方法.文章最后附上DEMO 本篇暂未考虑美化问题,只看功能.如图: 一.简单介绍 1> w ...

  3. 微信小程序页面栈_微信小程序之页面传值(路由、页面栈、globalData、缓存)

    1. 通过url带参数传递 1.1 固定参数传递 例如,从 list 页面到 detail 页面, 传递一个或多个固定值 list页面传值: 点此进入 detail detail页面取值: onLoa ...

  4. 微信小程序页面栈_微信小程序使用页面栈改变上一页面的数据

    微信小程序中如果从一个页面中进入下一个页面,如果下个页面的数据有删除或者增加再返回上一个页面的时候,就会导致页面不刷新(数据加载函数在onload中),从而造成数据不一致的情况.其实在微信小程序中是可 ...

  5. 小程序数据框有重影_微信小程序云开发数据库增删改查

    1.添加数据 onLoad: function (options) { this.adddemo(); }, adddemo:function() { const db = wx.cloud.data ...

  6. 商户后台返回数据签名错误_微信小程序 用户信息开放数据校验与解密

    服务端获取开放数据 小程序可以通过各种前端接口获取微信提供的开放数据.考虑到开发者服务端也需要获取这些开放数据,微信提供了两种获取方式: 方式一:开发者后台校验与解密开放数据 方式二:云调用直接获取开 ...

  7. 小程序数据框有重影_微信小程序input重影什么原因?怎么解决重影?

    微信小程序input重影什么原因?怎么解决重影?微信小程序input输入框输入出现了重影的情况,这是什么原因呢?又该怎么去解决微信小程序input重影问题. 微信小程序input重影怎么办? 问题描述 ...

  8. 微信小程序怎么把获取的值传到引用组件内_微信小程序如何将接口获取的数据传递给自定义组件...

    2019-07-11 回答 不知道你是什么意思.帮你改了下 class program { static int n = 4; int i, m; dsd[] a = new dsd[n]; publ ...

  9. 闲鱼有微信小程序吗_微信小程序商品展示页面(仿咸鱼)

    项目中做了一个商品发布展示的页面,记录下来 解决问题: 想在setData中更改数组具体下标中的某个值 let one = "lowMoney[" + 0 + "].mo ...

最新文章

  1. Vue.js 技术揭秘学习 (1) new Vue 发生了什么
  2. BitMap的原理和实现
  3. html表单php比较三个值大小,PHP比较三个数大小实现办法
  4. 企业远程接入配置 不宜贪小失大
  5. CentOS安装ClickHouse
  6. python字符串(连载二)|字符串内置函数原来还可以这么玩!
  7. Laravel核心解读--Facades
  8. python + opencv: 解决不能读取视频的问题
  9. 怎么自动缩进_Python 的缩进是不是反人类的设计?
  10. mysql 优化器_mysql之优化器、执行计划、简单优化
  11. python求立方尾不变_蓝桥杯—立方尾不变,有些数字的立方的末尾正好是该数字本身...
  12. 05 ZooKeeper分布式RMI协调实战
  13. BZOJ4033 [HAOI2015]树上染色 【树形dp】
  14. fcntl函数的SET用法
  15. git里面的文件怎么删不掉_.git目录删不掉
  16. 如何在苹果手机上进行自动化测试!!!!!可以尝试配置一下
  17. 如何衡量开发人员生产力的 10 个技巧
  18. 数学中的圆周率符号怎么输入
  19. 优化UE4性能 、减少DrawCall——材质中使用自定义基元数据
  20. cad渐开线齿轮轮廓绘制_CAD画齿轮的方法

热门文章

  1. spring bean依赖_Spring @Configuration并将bean依赖项作为方法参数注入
  2. 纪事本 乱码_纪事地图和Yahoo Cloud服务基准
  3. ArrayList clone()– ArrayList深拷贝和浅拷贝
  4. c 遍历文件 递归遍历_将递归文件系统遍历转换为流
  5. JUnit 5和Selenium –改善项目配置
  6. Spring MVC绑定,无设置器
  7. 使用React Native和Spring Boot构建一个移动应用
  8. Apache Ant 1.9.13和1.10.5发布–支持Java 11单文件源程序
  9. 跟踪反应流–将Spring Cloud Sleuth与Boot 2结合使用
  10. jca使用_使用JCA的密码学–提供者中的服务