var SYNC_API_RE = /requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$/;

 var CALLBACK_API_RE = /^on/;
// 微信同步api
function isSyncApi(name) {
return SYNC_API_RE.test(name);
} function isCallbackApi(name) {
return CALLBACK_API_RE.test(name);
}
// 是否应该使用promise
function shouldPromise(name) {
if (isSyncApi(name)) {
return false;
}
if (isCallbackApi(name)) {
return false;
}
return true;
}
// 使用promise
function handlePromise(promise) {
return promise.then(function (data) {
return [null, data];
}).
catch(function (err) {return [err];});
}
// 异步处理的使用promise
function promisify(name, api) {
if (!shouldPromise(name)) {
return api;
}
return function promiseApi() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
// 参数 --> 数组(可以简化吧)
for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
params[_key - 1] = arguments[_key];
}
// 如果以原始方式传入则调用原始方式
if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
return api.apply(void 0, [options].concat(params));
}
// 否则返回promise方式
return handlePromise(
new Promise(
function (resolve, reject) {
// options 为url等等配置
api.apply(void 0, [Object.assign({}, options, {
success: resolve,
fail: reject })].concat(
params)
);
/* eslint-disable no-extend-native */
Promise.prototype.finally = function (callback) {
// Promise 构造器对象,它身上有Promise.resolve()
var promise = this.constructor;
// Promise 实例化对象
return this.then(
function (value) {return promise.resolve(callback()).then(function () {return value;});},
function (reason) {return promise.resolve(callback()).then(function () {
throw reason;
});}); };
}));
};
}

都附上标注了,纯属个人理解,自己改吧改吧就能用,本人技术比较渣,只能学别人的代码!自己标注的,有不对的地方可以留言!不懂得地方也可以问我

uniapp如何将微信小程序API封装为Promise的更多相关文章

  1. 微信小程序api封装(promise)

    顺带这是我平时公司切换改变网络环境 直接上代码,我相信就可以懂了, //app.js function fetchApi(url, type, params, method) { return new ...

  2. 微信小程序api封装

    写多 之后,吸取之前的经验,瞎写了一个简单的封装api,有幸看到的朋友,就随便看看哈,如果能给到你帮助就一直棒了,额呵呵呵! 新建constant.js和api.js文件 在constant.js中统 ...

  3. 微信小程序:封装全局的promise异步调用方法

    微信小程序:封装全局的promise异步调用方法 一:封装 function POST(url, params) { let promise = new Promise(function (resol ...

  4. 微信小程序简单封装图片上传组件

    微信小程序简单封装图片上传组件 希望自己 "day day up" -----小陶 我从哪里来 在写小程序的时候需要上传图片,个人觉得官方提供的 Uploader 组件不是太好用, ...

  5. 微信小程序api拦截器

    微信小程序api拦截器 完美兼容原生小程序项目 完美兼用小程序api的原本调用方式,无痛迁移 小程序api全Promise化 和axios一样的请求方式 小程序api自定义拦截调用参数和返回结果 强大 ...

  6. 微信小程序 API

    微信小程序 API https://developers.weixin.qq.com/miniprogram/dev/component/cover-view.html demo https://de ...

  7. 微信小程序API交互的自定义封装

    目录 1,起因 2,优化成果 3,实现思路 4,完整代码 1,起因 哪天,正在蚂蚁森林疯狂偷能量的我被boss叫过去,告知我司要做一个线上直播公开课功能的微信小程序,博主第一次写小程序,复习了下文档, ...

  8. uni-app - vue以及微信小程序

    uni-app结合了mpvue的优点以及微信小程序的优点 ,uni-app基于vue2.0的. 组件:https://uniapp.dcloud.io/component/README 接口:http ...

  9. uniapp发布到微信小程序整改摘要

    uniapp作为跨端的利器,可同时发布到安卓.ios.微信小程序.支付宝小程序.百度小程序.头条小程序.QQ小程序等8个平台. 如果是轻量级的应用,不涉及太多功能的话,或许可以直接打包移植,但涉及前后 ...

随机推荐

  1. python 生成器(generator)的生成方式

    generator包括生成器和带yield的generator函数. 写了一个生成杨辉三角的小例子: # -*- coding:utf-8 -*- def triangles(): l = [1] w ...

  2. OO第四次作业总结

    一:测试与正确性论证的效果差异 首先,测试和正确性论证都是对程序的可靠与否,是否有误进行测试,从整体上来看,测试多偏向于实践,而正确性论证则大多偏向于理论. 测试:测试首先是构造一组测试样例,之后将程 ...

  3. 高通sdm845_la2.0源码编译及使用QFIL刷机

    一.下载源码 高通芯片代码下载地址:https://chipcode.qti.qualcomm.com/ . *_amss_standard_oem : 高通私有源码(*为sdm845-la--. * ...

  4. spring的bean创建过程

    Spring的bean创建过程 步骤 执行过程 描述 1 ThreadLocal.set bean创建之前将beanName的一些属性放进ThreadLocal,避免多线程创建bean导致问题,并发创 ...

  5. 获取.properties后缀的数据

    在MyPro.properties中的数据如下: Name=ABC 测试类中: Properties properties = new Properties(); String configFile ...

  6. linux目录说明

    /etc/passwd  用户信息文件 [root@web01 ~]# cat /etc/passwd root: x: : : root: /root: /bin/bash 可登录用户 bin: x ...

  7. Application 、Cookie和 Session 两种会话有什么不同

    Application储存在服务端,没有时间限制,服务器关闭即销毁 Session存储在服务端,客户端,关闭即销毁(长时间不使用,且浏览器未关闭,默认自动销毁时间是20分钟) Cookie储存在客户端 ...

  8. Ceph集群更换public_network网络

    1.确保ceph集群是连通状态 这里,可以先把机器配置为以前的x.x.x.x的网络,确保ceph集群是可以通的.这里可以执行下面的命令查看是否连通,显示HEALTH_OK则表示连通 2.获取monma ...

  9. Python 习题一

    1.使用while循环输入 1 2 3 4 5 6 8 9 10 # Author:Tony.lou i = 1 while i < 11: if i == 7: pass else: prin ...

  10. 第十二周翻译-《Pro SQL Server Internals, 2nd edition》

    <Pro SQL Server Internals, 2nd edition> 作者:Dmitri Korotkevitch 翻译:赖慧芳 译文: 专业SQL服务器内部 了解在引擎盖下发生 ...