1. var SYNC_API_RE = /requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$/;
  2.  
  3. var CALLBACK_API_RE = /^on/;
  4. // 微信同步api
  5. function isSyncApi(name) {
  6. return SYNC_API_RE.test(name);
  7. }
  8.  
  9. function isCallbackApi(name) {
  10. return CALLBACK_API_RE.test(name);
  11. }
  12. // 是否应该使用promise
  13. function shouldPromise(name) {
  14. if (isSyncApi(name)) {
  15. return false;
  16. }
  17. if (isCallbackApi(name)) {
  18. return false;
  19. }
  20. return true;
  21. }
  22. // 使用promise
  23. function handlePromise(promise) {
  24. return promise.then(function (data) {
  25. return [null, data];
  26. }).
  27. catch(function (err) {return [err];});
  28. }
  29. // 异步处理的使用promise
  30. function promisify(name, api) {
  31. if (!shouldPromise(name)) {
  32. return api;
  33. }
  34. return function promiseApi() {
  35. var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  36. // 参数 --> 数组(可以简化吧)
  37. for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  38. params[_key - 1] = arguments[_key];
  39. }
  40. // 如果以原始方式传入则调用原始方式
  41. if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
  42. return api.apply(void 0, [options].concat(params));
  43. }
  44. // 否则返回promise方式
  45. return handlePromise(
  46. new Promise(
  47. function (resolve, reject) {
  48. // options 为url等等配置
  49. api.apply(void 0, [Object.assign({}, options, {
  50. success: resolve,
  51. fail: reject })].concat(
  52. params)
  53. );
  54. /* eslint-disable no-extend-native */
  55. Promise.prototype.finally = function (callback) {
  56. // Promise 构造器对象,它身上有Promise.resolve()
  57. var promise = this.constructor;
  58. // Promise 实例化对象
  59. return this.then(
  60. function (value) {return promise.resolve(callback()).then(function () {return value;});},
  61. function (reason) {return promise.resolve(callback()).then(function () {
  62. throw reason;
  63. });});
  64.  
  65. };
  66. }));
  67. };
  68. }

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

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. 面试北京XX科技总结

    1             面试时间与地点 面试时间:2019年1月17号,面试地点:北京. 2             公司概况 开发的产品是集团内部使用,开发的语言ts脚本语言.目前开发团队15人 ...

  2. Android Studio之SVN打分支、切换分支及合并分支

    1.打分支: 右击项目--Subversion--Branch or Tag 点击OK,分支就创建成功了,接下来我们切换到分支v2 2.切换分支: 右击项目--Subversion--Update D ...

  3. [BZOJ1596]电话网络

    Problem 给你一棵树,可以在每个点上选择造塔或不造,每座塔可以覆盖这个节点和相邻节点,问覆盖整棵树的最小塔数. Solution 看到这道题的第一眼,我就觉得是一题贪心题,但看见出题的时候分类在 ...

  4. 安装easydict

    在运行lightheadrcnn做test时,提示缺少easydict 不知道什么原因,用pip install easydict或者conda install easydict都没有用,不能安装ea ...

  5. VIPKID 内推---开发工程师

    VIPKID 目前是K12教育领域最大的一家公司,目前已发展到6w名北美外教,服务于中国50w的小朋友,每天数十万节视频课程在线上进行. 有兴趣加入VIPKID的程序员小伙伴,请发简历到 gloryz ...

  6. java基本类型和数字类及其相关计算

    --- java 八大基本类型 byte  short int long double float boolean char --对应的包装类 Byte Short Integer Long Doub ...

  7. IoT experitment

    Abstract: In order to solve the problems of complex experiment management, complicated teaching task ...

  8. use this method get wifi from notebook

    sudo apt dist-upgrade http://cache.baiducontent.com/c?m=9d78d513d9981de90fb3837e7c478a265b09c0307a8c ...

  9. 13. Roman to Integer ★

    题目内容: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range fr ...

  10. lintcode中等题目的四道题

    第一题: 第一句先创建了一个解决问题的类, 第二句声明了一个公共接口的整形链表里面有N个整形数, 第三句给链表动态初始化, 第四步判断链表里的数有没有,如果N<=0则返回结果0,否则执行Prin ...