Table of contents
展开目录
目录
异常
联调接口时,通常后端会有一套通用的 ResponseDTO
:
在开发过程中,可能会有某些场景,期望 Promise
或者 async function
抛出一个异常:
但是这样会导致我们自定义的异常和 API 的返回数据结构不一致,那么,我们就封装一个自定义异常进行统一:
CustomException
SDKException
使用小程序 SDK 时,SDK 所给的 error
是这样的:
和 IBaseResponse
又有很大的差异,那么,我们就封装一个SDK 异常进行统一:
异常来源
通过instanceof
判断(👍 推荐)
通过name
判断
⚡ 额外小心
小程序的 SDK 会返回所有的错误,包括:取消、拒绝等,在捕获 SDKException
需要过滤掉这类场景:
通讯
queryParams
pageA navigateTo
pageB (最基本的通讯方式)
variableStorage
orderList set data, orderDetail get data(适合一次性通讯复杂的数据结构)
定义 storage class
定制专属 store
发布订阅
pageA navigateTo
pageB (先订阅后发布)
eventBus
有很多实现方式,这里简单展示项目中使用的模块示例:
eventKeys
不要使用魔法字符,使用常量:
订阅事件
先订阅(orderList 在 orderDetail 之前)
后发布(orderDetail 在 orderList 之后)
技巧
CSS Reset
安全区适配
页面中使用
组件中使用
引用页面或父组件的样式
Page Enhancer
某些场景,我们可能需要去增强 Page,例如:
- 在所有
Page
重写生命周期钩子;
- 在所有
Page
中填充 data
属性;
- etc…
还记得 React
中的 HOC
吗?
参考 HOC
,我们可以编写一个 Enhancer
来增强小程序的 Page
(Component
同理):
SDK Promisify
虽然现在大部分 SDK 支持异步,但仍然有少量不支持,例如:wx.login
等,只能使用回调
函数的形式处理 SDK 的成功与失败:
现在对 wx.login
做一个 Promise
的异步封装:
如果项目中使用了 10 个 SDK 的调用,代码会变成… 😕
参照 Nodejs
中的 util.promisify(original)
,封装一个简易的 promisify()
:
SDK ApplyPermission
在小程序中,很多针对客户端的 SDK,都需要申请权限,例如:获取地理位置、选择微信地址、添加联系人到通讯录、保存图片至相册 等…
某些 SDK 一旦用户拒绝,再次调用时会直接报错而不会再执行后面的逻辑,
此时,我们需要引导用户打开小程序设置页,开启对应权限。
完整的 SDK ApplyPermission
示例:
以上是我在小程序实际开发过程中,为数不多但又较为常见的经验总结。
欢迎你提交 Pull Request
和我一起完善。🎉 🎉 🎉