README
wxmini-promisify
微信官方已于 2019 年 7 月 16 日推出了小程序 API Promise 化独立的扩展库 miniprogram-api-promise,详情请参阅此链接。
微信官方已于 2020 年 2 月 20 日在小程序基础库 2.10.2 中支持了 API Promise 形式调用,详情请参阅此链接。
本库也会继续维护更新。
特性
- 将微信小程序或小游戏中提供的基于回调函数的 API,转化为 Promise 形式(wx.func 将转换成同名的 wx.funcAsync 形式);
- 与 wepy 框架的 promisify 模块相比,侵入性更小,同时以
Promise.prototype.finally
的形式支持了原本的 complete 回调; - 与 miniprogram-api-promise 库相比,支持了 TypeScript。虽然社区有了解决方案(详情参考此 Issue),但并非百分百完全兼容,仍有部分类型声明因原始命名不标准而遗漏;
- 可单独拷贝到项目中使用;
- 支持 TypeScript;
- 与微信小程序基础库(当前版本:2.21.3)同步更新。
用法
安装:
npm install @skit/wxmini-promisify
导入:
import wxmini from '@skit/wxmini-promisify';
wxmini.promisify({
root: wx, // (可选)指定异步方法挂载到某个对象的属性上。默认挂载到 wx。
extends: ['someNewApi'], // (可选)若基础库新增了某些 API 而本库尚未更新,可由此传入相应的方法名数组以转换成异步方法。
enableCompatible: true // (可选)指示是否为低版本基础库提供覆写,防止抛出 NPE(这些方法会在调用后直接进入 fail/catch 回调)。默认值为 true。
});
使用异步方法:
// 原始方法
wx.login({
timeout: 5000,
success: (res) => {
console.info(res.code);
},
fail: (err) => {
console.error(err);
},
complete: () => {
// Do Something always
}
});
// Promise 方法
wx.loginAsync({ timeout: 5000 })
.then((res) => {
console.info(res.code);
})
.catch((err) => {
console.error(err);
})
.finally(() => {
// Do Something always
});