@skit/wxmini-promisify

为微信小程序、小游戏提供 TypeScript 支持,同时将其基于回调函数的异步 API 转化为 Promise 形式。

Usage no npm install needed!

<script type="module">
  import skitWxminiPromisify from 'https://cdn.skypack.dev/@skit/wxmini-promisify';
</script>

README

wxmini-promisify

NPM Version NPM Download Dependency Status License

微信官方已于 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
    });