[小程序] 终于可以愉快的使用 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. SQL SERVER查看当前连接情况

    使用超级管理员账户登录,并执行以下命令: SELECT * FROM [Master].[dbo].[SYSPROCESSES] WHERE [DBID] IN ( SELECT [DBID] FRO ...

  2. [jobdu]栈的压入、弹出序列

    用一个栈辅助,模拟过程+判断就可以了. #include <iostream> #include <memory.h> #include <stack> #defi ...

  3. Oracle系列之异常处理

    涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等 使用select into语句读取tb_Employee的一行,使用异常处理处理no_data_found和two_many_rows ...

  4. Webform——注册验证

    服务器控件和客户端控件的交替使用,主要还是获取到各个控件的值,直接用C#或Js判断是否符合条件就可以. 这里是以服务器控件为例子,至于客户端控件则需要写JS代码 .UserBF public clas ...

  5. Nagios "process_cgivars()" 单字节溢出漏洞

    漏洞版本: Nagios Nagios 4.x Nagios Nagios 3.x 漏洞描述: Nagios是一款免费开放源代码的主机和服务监视软件,可使用在多种Linux和Unix操作系统下. Na ...

  6. c语言main函数的参数argc,argv说明

    main函数参数argc,argv说明   C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(i ...

  7. 【转】 如何查看linux版本 如何查看LINUX是多少位

    原文网址:http://blog.csdn.net/hongweigg/article/details/7192471 一.如何得知自己正在使用的linux是什么版本呢,下面的几种方法将给你带来答案! ...

  8. JS模块化规范CommonJS,AMD,CMD

    模块化是软件系统的属性,这个系统被分解为一组高内聚,低耦合的模块.理想状态下我们只需要完成自己部分的核心业务逻辑代码,其他方面的依赖可以通过直接加载被人已经写好模块进行使用即可.一个模块化系统所必须的 ...

  9. (转载)SQL Server 2005 日志文件过大处理

    由于安装的时候没有计划好空间,默认装在系统盘,而且又没有做自动备份.截断事务日志等,很快LDF文件就达到十几G,或者几十G ,此时就不得不处理了. 备份和计划就不说了,现在就说下怎么把它先删除吧: 1 ...

  10. Android ListView初始化简单分析

    下面是分析ListView初始化的源码流程分析,主要是ListVIew.onLayout过程与普通视图的layout过程完全不同,避免流程交代不清楚,以下是一个流程的思维导图. 思维导图是顺序是从左向 ...