看到一个面试题,原生小程序中api的调用,都是回掉函数,怎么处理成优雅的链式调用呢?
那肯定是通过promise 封装起来啊,怎么封装呢?很简单,代码如下
/**
*
* promisify化api
*
* @param {string} swan 小程序(swan, wx等)
* @param {string} method api名字
* @param {object} options api参数
* @return {function(*=): Promise<*>} promisify的api
*/
export default const promisify = swan => method => 。options => new Promise((resolve, reject) => {
if (!swan[method]) {
reject();
}
swan[method]({
...options,
success: res => resolve(res),
fail: err => reject(err)
});
});
封装起来很简单,我想把封装好的东西,可以让其他人公用,但是不想每次需要用的时候都要手动copy代码,怎么办呢?网上有很多教程,我这边记录一下我选用的cnpm搭建的过程
通过cnpm搭建自己的私仓库
1.安装
npm install -g --build-from-source cnpmjs.org cnpm sqlite3
# 如果报错或者警告通过下面方式安装
npm install -g --unsafe-perm --verbose --build-from-source cnpmjs.org cnpm sqlite3
安装响应的包
2.启动并配置服务
// 管理员:eric@baidu.com
// 范围:@duer
// 默认端口:7001-registry, 7002-web
nohup cnpmjs.org start --admins='10xxxxxx@qq.com' --scopes='@duer'
配置并启动服务
3.设置注册地址
将cnpm默认注册地址更改为私有注册地址
cnpm set registry http://localhost:7001
4.登录cnpm
注册,登录
5.创建上传到私有库
把开头我们promisify的文件,上传到我们的私有库
cnpm publish
上传到私有库
6.预览我们的包
浏览器预览我们的包
open http://localhost:7002/@duer/promisify
浏览器自动打开这个页面,是不是很熟悉
7.安装
cnpm install @duer/promisify
好了,就到这里了。
注: 既然已经封装好了,就把连接贴出来吧
https://github.com/airwaycai/promisify/blob/master/index.ts