[小程序] 终于可以愉快的使用 async/await 啦

这篇文章主要是想说一下 怎么在微信小程序中使用async/await从而逃离回调地狱

背景

最近一直在搞微信小程序 用的语言是TypeScript 小程序的api都是回调形式 用起来就是各种回调嵌套 我个人很不喜欢 所以一直想用async/await

之前用TypeScript target到ES2015 可以用async/await 但是在iphone上表现不好 后来微信开发者工具的更新日志中又提到 移除了promise 开发者需要自行引入 导致target到ES2015的async/await也不能用了

最近 TypeScript发布了2.1版本 从更新日志中看到 TypeScript2.1 增加了对ES5的async/await支持

经过实践 炒鸡好用

原理

TypeScript会把所有async/await编译成ES5支持的语法 target ES2015的时候是用yield实现的 到ES5则使用swicth case 实现的

然后在用到async/await的文件中引入Promise polyfill 微信小程序就可以正常的工作了

准备

  • TypeScript

    上面一直在说这个 所以这个肯定是必须的
  • VS Code

    微软爸爸出的开源编辑器 听说在某大型同性交友网站上很火
  • Promise polyfill

    Promise是用async/await的基础 既然微信移除了 那么只好手动引入了 ES6 Promise
  • Gulp

    需要用它来执行一个特殊的任务 保证可以愉快的使用async/await
  • 项目模板

    这里 这是本人的从我的生产项目中提取的一个模板 各位可以参考一下

重点

  • tsconfig.json

    TypeScript2.1的更新日志中说 要在ES5中用async/await 需要在tsconfig.json中的lib添加promise 从而告诉tsc 我现在要用promise了 编译的时候注意点 不要瞎报错

    {
    "compilerOptions": {
    "lib": ["dom", "es2015.promise", "es5"]
    }
    }
  • 引入Promise polyfill

    局限于微信小程序的文件模块特性 每一个用到async/await的ts文件 都需要引入Promise polyfill

    // var Promise = require('./utils/es6-promise.min').Promise;

    之所以是注释状态 是因为Promise是关键词 不注释掉的话 VS Code会报错 并且tsc编译也会报错

  • gulpfile.js

    在gulpfile中添加一个去掉上面的注释的任务 并在tsc编译之后执行 这样就可以顺利引入Promise polyfill了

    const gulp = require('gulp');
    const replace = require('gulp-replace'); gulp.task('addPromise', () => {
    gulp.src('dist/**/*.js')
    .pipe(replace('// var Promise', 'var Promise'))
    .pipe(gulp.dest('dist'));
    });

    个人感觉这个办法有点傻 哪位大神想到更好的办法 欢迎分享

参考

[微信小程序] 终于可以愉快的使用 async/await 啦的更多相关文章

  1. 微信小程序终于审核过了

    终于,我做的微信小程序审核结束了,虽然被退回来两次,但是第三次还是审核通过了! 加油骚年,相信自己!! 有什么问题可以评论告诉我!!

  2. 【WePY小程序框架实战四】-使用async&await异步请求数据

    [WePY小程序框架实战一]-创建项目 [WePY小程序框架实战二]-页面结构 [WePY小程序框架实战三]-组件传值 async await 是对promise的近一步优化,既解决了promise链 ...

  3. 微信小程序中出现Invoking Page() in async task.问题

    在做项目中需要让页面跳到外网,用到了<web-view src=""> </web-view>组件,需要新建一个文件放这个组件,调接口的时候链接连到这个页面 ...

  4. 微信小程序踩坑集合

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

  5. 微信小程序中同步 异步的使用

    https://www.jianshu.com/p/e92c7495da76   微信小程序中使用Promise进行异步流程处理 https://www.cnblogs.com/cckui/p/102 ...

  6. 微信小程序的应用及信息整合,都放到这里了

    微信小程序终于开始公测了,这篇文章也终于可以发布了. 这篇文章可以说是微信小程序系列三部曲最后一篇.8 月份,小程序推出前,我写了<别开发 app 了>详细阐述了为什么创业应该放弃原生 a ...

  7. 初试微信小程序

    2016年11月3日,微信小程序终于公测了,大家可以正式开发了.早在这之前,应公司要求,和同事就早早的试了一下微信小程序的开发,特此记录一下: 微信官方小程序文档:https://mp.weixin. ...

  8. 微信小程序首支视频广告片发布

    自2017年1月9日上线以来,微信小程序瞬间引爆网络,又迅速归于平静.对这个“无需安装.触手可及.用完即走.无需卸载”的小程序,微信从一开始就对它寄予了无限期望.在公布一系列规则更改后,微信小程序终于 ...

  9. 微信小程序request同步请求

    今天在搞微信小程序的时候顺手用了async,await死活不起作用,后来查了一下子,竟然不支持,那没办法就换了一种实现wx.request同步请求的方案 祭出promise来搞一搞,下面直接贴代码,简 ...

随机推荐

  1. bzoj 1314: River过河 优先队列

    1314: River过河 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 26  Solved: 10[Submit][Status][Discuss ...

  2. C语言预处理运算符

    转自C语言预处理运算符 预处理还需要运算符?有没有搞错? ^_^, 没有搞错,预处理是有运算符,而且还不止一个: #(单井号)    -- 字符串化运算符. ##(双井号 )-- 连接运算符 #@   ...

  3. HDU1632+半平面交

    模板题 题意:给定两个凸多边形,求出合并后的面积,这个合并后的面积不包括重叠部分. #include<stdio.h> #include<string.h> #include& ...

  4. vs2012+cmake+opencv+opencv unable to find a build program corresponding to "Visual Studio 12 Win64". CMAKE_MAKE_PROGRAM is not set

    搜索了下,说什么的都有! 一,提示找不到 cmake-2.8.12.1 的 modles 卸载了cmake后发现 cmd 中的 cmake --version 还是 2.8.11.1 找到是我的cyg ...

  5. HDOJ多校联合第四场

    B题: C题:仅由'A','G','C','T',4个字母组成,给定一个字符串S,|S|<=15,给定一个整数m,以m为长度且仅含4种字母的字符串T,求LCS(S,T)为0,1,2,3....| ...

  6. 【HDOJ】2430 Beans

    这题目用线段树超时了,其实也差不多应该超时.10^6大数据量.看了一下网上的解法是单调队列.大概了解了一下,是个挺有意思的数据结构.首先,需要求满足0<=(S[r]-S[l])%p<=k时 ...

  7. usaco4.12Fence Rails(迭代加深)

    为了这题还去学了下迭代加深 回来还是不会写 只好参考各大神的代码及题解了 二分枚举最大可以切的块数 然后就是各种分析及优化 USACO题解里写了7个优化.. 问题分析 抽象一下就可以发现,算法的本质是 ...

  8. Understanding Network Class Loaders

    By Qusay H. Mahmoud, October 2004     When Java was first released to the public in 1995 it came wit ...

  9. ASP.NET 導入Excel

    常常碰到這種需求,為了避免自己每次寫Code都要東翻西找Sample,乾脆丟上來當備份 此外,也為了方便網路上的大大們Copy Paste方便,小弟已經順便標示要複製程式碼的起始結束位置 在歡樂的貼程 ...

  10. c# post文字图片至服务器

    最近由于项目需要实现c#提交文字及数据至服务器,因此研究了一下c# php数据传送: 下面用一个示例来演示,c# post文字+图片 ,php端接收: post提交数据核心代码(post数据提交) ? ...