uniapp如何将微信小程序API封装为Promise
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的更多相关文章
- 微信小程序api封装(promise)
顺带这是我平时公司切换改变网络环境 直接上代码,我相信就可以懂了, //app.js function fetchApi(url, type, params, method) { return new ...
- 微信小程序api封装
写多 之后,吸取之前的经验,瞎写了一个简单的封装api,有幸看到的朋友,就随便看看哈,如果能给到你帮助就一直棒了,额呵呵呵! 新建constant.js和api.js文件 在constant.js中统 ...
- 微信小程序:封装全局的promise异步调用方法
微信小程序:封装全局的promise异步调用方法 一:封装 function POST(url, params) { let promise = new Promise(function (resol ...
- 微信小程序简单封装图片上传组件
微信小程序简单封装图片上传组件 希望自己 "day day up" -----小陶 我从哪里来 在写小程序的时候需要上传图片,个人觉得官方提供的 Uploader 组件不是太好用, ...
- 微信小程序api拦截器
微信小程序api拦截器 完美兼容原生小程序项目 完美兼用小程序api的原本调用方式,无痛迁移 小程序api全Promise化 和axios一样的请求方式 小程序api自定义拦截调用参数和返回结果 强大 ...
- 微信小程序 API
微信小程序 API https://developers.weixin.qq.com/miniprogram/dev/component/cover-view.html demo https://de ...
- 微信小程序API交互的自定义封装
目录 1,起因 2,优化成果 3,实现思路 4,完整代码 1,起因 哪天,正在蚂蚁森林疯狂偷能量的我被boss叫过去,告知我司要做一个线上直播公开课功能的微信小程序,博主第一次写小程序,复习了下文档, ...
- uni-app - vue以及微信小程序
uni-app结合了mpvue的优点以及微信小程序的优点 ,uni-app基于vue2.0的. 组件:https://uniapp.dcloud.io/component/README 接口:http ...
- uniapp发布到微信小程序整改摘要
uniapp作为跨端的利器,可同时发布到安卓.ios.微信小程序.支付宝小程序.百度小程序.头条小程序.QQ小程序等8个平台. 如果是轻量级的应用,不涉及太多功能的话,或许可以直接打包移植,但涉及前后 ...
随机推荐
- SGD、GD
GD参考: https://blog.csdn.net/CharlieLincy/article/details/70767791 SGD参考:https://blog.csdn.net/Charli ...
- element-ui的那些坑与总结
tags: 默认情况下,下划线是文本宽度 如果要加宽,则可以设置文本(label)的padding, 常规情况下,无法改label宽度,因为他是动态计算的 不过,可以通过自定义,把label拿出来,自 ...
- [Codeforces375E]Red and Black Tree
Problem 给定一棵有边权的树.树上每个点是黑或白的.黑白点能两两交换. 求符合任意一个白点到最近黑点的距离小于等于x时,黑白点交换次数最少为多少. Solution 明显是一题树形DP.我们先跑 ...
- SharedPreference映射Java类
package com.overlook.weagree.util; import android.app.Activity; import android.content.Context; impo ...
- 记一次 SSM 分页
1.实体层(entity,pojo,domain) package com.entity; import java.io.Serializable; private int totalCount; / ...
- linux驱动由浅入深系列:PBL-SBL1-(bootloader)LK-Android启动过程详解之一(高通MSM8953启动实例)
转自:http://blog.csdn.net/radianceblau/article/details/73229005 http://www.aiuxian.com/article/p-14142 ...
- easyui datagrid 后台返回所有数据,前台分页
function pagerFilter(data) { if (typeof data.length == 'number' && typeof data.splice == 'fu ...
- if else 和if elif else的区别
def fuck(a): if a ==1: print(a) if a ==2: print("not good") else: print("tamade" ...
- 虚拟机3种网络模式(桥接、nat、Host-only)
http://www.cnblogs.com/ggjucheng/archive/2012/08/19/2646007.html
- linux 清理缓存buff/cache
清理缓存 echo 1 > /proc/sys/vm/drop_cachesecho 2 > /proc/sys/vm/drop_cachesecho 3 > /proc/sys/v ...