小程序Promise不支持finally解决方案

代码片段

点击链接即可在微信开发者工具中查看代码wechatide://minicode/t2eidemj7P3X

git地址

基本思路

小程序的Promise是不支持polyfill方法的,这样有一些操作就不太方便玩了,比如hideLoading,总不能在resolve和reject写两遍吧,这样不优雅。其实稍微有些经验的前端开发工程师都清楚,如果一个东西原生不支持,可以引入他的polyfill库,小程序上也是从这个思路出发的,不过小程序有两个比较坑的地方,就是我们取不到全局变量,换句话说就是直接console.log(this),结果是undefined

那我们引用一个Promise库应该如何使用呢?我们不妨来读一下Promise-polyfill的源码。

跳过Promise的实现,我们看到他最后是把Promise绑定到全局对象上,就是图中的globalNS,那么我们只要找到globalNS代表什么就知道Promise在哪了,可以看到他依次判断selfwindowglobal。通过我们的实践发现,前面两个还真的是undefined,那么我们可以肯定Promiseglobal对象上,最后输出看了一下,还真是。

找到了Promise实际上这一步就可以用它了,但是还是比较麻烦,因为如果用引用的第三方库的Promise需要加global前缀,不加的话还是原生的,我们可以直接用赋值号干掉原生的Promise。

大功告成,至此可以放心大胆的使用Promise规范支持的各个功能了,还可以根据自己的需求修改Promise的实现来定制功能。

思考

为何小程序直接console.log(this)undefined?注意此时的this是最外层的this,不是Page里面的this更不是Component里面的this,这个问题我也不是特别清楚,虽然在js文件中无法输出window对象,但是如果直接在控制台输入window是可以的,并且我们修改Promise之后,window.Promise也变成修改后的值了,所以我猜想,window对象还是存在的,但是微信把他隐藏起来了,以至于我们只能访问window下面的属性,由此也导致,全局this也是undefined并不是global。当然这只是一个猜想,如果有其他想法也欢迎和我讨论。

延伸

关于Promise兼容问题还是比较好解决的,不过Promise的实现可以手撕一下,不到200行的代码量能学到很多东西。

转载于:https://www.cnblogs.com/ljybill/p/10097852.html

小程序Promise不支持finally解决方案相关推荐

  1. 微信小程序 - Promise 封装多张图片上传

    前言 最近,项目需要新加一个用户发布文章的功能,因为小程序选取的图片都是临时路径,所以需要上传到服务器转为网络图片路径再发布出去.但是小程序上传图片只支持单张图片,在这种情况下图片的上传完成后输出的顺 ...

  2. 小程序promise封装post请求_微信小程序promise封装get/post请求

    微信小程序promise封装get/post请求 2020-07-04 20:42:49 微信小程序promise封装get/post请求 叶子兔 2018-10-10 08:55:30  1056  ...

  3. uni app input添加获取验证码按钮_uni-app跨平台框架对微信小程序的无障碍支持探索...

    uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.H5.以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝).快应用等多个平台. ...

  4. 强大的装逼,表白,炫富,恶搞短视频制作神器微信小程序源码支持多种流量主

    大家好给大家带来一款强大的微信小程序源码 该源码是属于制作短视频类型的 支持一键制作成各种短视频,比如装逼,表白,炫富,恶搞-..等等 里面拥有各种各样的模板,和抖音一键制作视频一个道理 另外里面小编 ...

  5. 喝酒神器微信小程序源码 支持流量主解锁多人对战

    简介: 今天给大家带来一款娱乐超高的喝酒神器微信小程序源码 该款小程序还支持换筛盅皮肤哟,拥有多种皮肤看激励视频解释 流量主支持多种广告方式的收益 首页弹窗广告位 激励视频广告位 Banner广告位 ...

  6. 独家全新娱乐性超高的喝酒神器微信小程序源码支持流量主解锁多人对战等等

    今天给大家带来一款娱乐超高的喝酒神器微信小程序源码 该款小程序还支持换筛盅皮肤哟,拥有多种皮肤看激励视频解释 流量主支持多种广告方式的收益 首页弹窗广告位 激励视频广告位 Banner广告位 视频广告 ...

  7. 微信小程序开发常见warnings警告解决方案

    在小程序开发过程中,只要稍不注意代码细节,就会出现很多 warnings 警告,虽然在对小程序的运行并没有什么影响,但是作为一名严谨的程序猿,是不允许它们存在的. 下面我将从我的实际项目开发过程中碰到 ...

  8. 二开版优化新紫色UI云开发新款壁纸小程序源码支持用户投稿在线审核

    本壁纸表情包头像小程序采用(dcloud云开发)所以无需服务器与域名 无需服务器.无需域名.云开发直接上线 特点:支持用户投稿,后台审核后会发订阅消息给用户提示作品审核状态,增加用户粘性,支持后端修改 ...

  9. (已更新)全新商城微信小程序源码支持对接公众号

    运行环境Linux+Nginx+PHP7.4+MySQL(5.6|5.7) 一键安装 1.上传你的代码 2.项目目录设置755权限 3.设置伪静态规则(nginx 推荐使用) 复制代码location ...

最新文章

  1. JAVA web项目转客户端(nativefier)
  2. 小议 static 关键字
  3. thinkphp5+workerman搭建微信小程序socket后台,建立自己的聊天室
  4. tp5.0行为的用法,可以存入json数据,方便读取数据。
  5. Ubuntu 16.04安装教程及虚拟机设置
  6. 牛客题霸 [分糖果问题] C++题解/答案
  7. thinkpad装linux无线网卡驱动,Thinkpad SL510 笔记本安装 Linux 无线网卡驱动
  8. Maven 仓库、镜像
  9. SQL Developer 使用问题与解决方法汇总
  10. 计算机桌面显示本地磁盘c,开机自动打开本地磁盘C的解决办法
  11. 让 WAS V6.1 的 JSP 编译器用 JDK5.0
  12. 吾管不到的地方,资源已开始混乱
  13. 手动安装ojdbc6
  14. linux基本命令整理——鸟哥linux私房菜第九章
  15. 城市聚焦:全球十二大性感之城
  16. 高性能JSON框架之FastJson的简单使用
  17. Chuck语言学习笔记——0.前言:我为什么要学习这门语言
  18. 九章量子计算机应用,“九章”量子计算机这么牛,到底有什么用?|【经纬低调分享】...
  19. $.ajax异步请求总结
  20. 高等数学-线性代数:已知特征值,求解特征空间的特征向量

热门文章

  1. Druid实现数据库连接用户密码加密
  2. Django 框架学习经验分享
  3. 关于matlab中矩阵取值的方法
  4. 适合年会玩的互动小游戏,赶紧打开看一看
  5. iOS Still Image Capture Using AVCaptureSession(使用AVCaptureSession获取静止Image)
  6. Isometric Tile Engine 的遮挡处理
  7. LabVIEW 2013SP1视觉开发必备软件LV、VDM、VBAI、VAS
  8. QQ,浏览器,还有这些版本?
  9. 教你如何用计算机玩游戏,想要在电脑设备上玩手机游戏,教你如何使用tcgames软件进行操作...
  10. 数据分析——巧用ABtest,看杰伦和徐坤的流量之争