[微信小程序] 终于可以愉快的使用 async/await 啦
[小程序] 终于可以愉快的使用 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 啦的更多相关文章
- 微信小程序终于审核过了
终于,我做的微信小程序审核结束了,虽然被退回来两次,但是第三次还是审核通过了! 加油骚年,相信自己!! 有什么问题可以评论告诉我!!
- 【WePY小程序框架实战四】-使用async&await异步请求数据
[WePY小程序框架实战一]-创建项目 [WePY小程序框架实战二]-页面结构 [WePY小程序框架实战三]-组件传值 async await 是对promise的近一步优化,既解决了promise链 ...
- 微信小程序中出现Invoking Page() in async task.问题
在做项目中需要让页面跳到外网,用到了<web-view src=""> </web-view>组件,需要新建一个文件放这个组件,调接口的时候链接连到这个页面 ...
- 微信小程序踩坑集合
1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...
- 微信小程序中同步 异步的使用
https://www.jianshu.com/p/e92c7495da76 微信小程序中使用Promise进行异步流程处理 https://www.cnblogs.com/cckui/p/102 ...
- 微信小程序的应用及信息整合,都放到这里了
微信小程序终于开始公测了,这篇文章也终于可以发布了. 这篇文章可以说是微信小程序系列三部曲最后一篇.8 月份,小程序推出前,我写了<别开发 app 了>详细阐述了为什么创业应该放弃原生 a ...
- 初试微信小程序
2016年11月3日,微信小程序终于公测了,大家可以正式开发了.早在这之前,应公司要求,和同事就早早的试了一下微信小程序的开发,特此记录一下: 微信官方小程序文档:https://mp.weixin. ...
- 微信小程序首支视频广告片发布
自2017年1月9日上线以来,微信小程序瞬间引爆网络,又迅速归于平静.对这个“无需安装.触手可及.用完即走.无需卸载”的小程序,微信从一开始就对它寄予了无限期望.在公布一系列规则更改后,微信小程序终于 ...
- 微信小程序request同步请求
今天在搞微信小程序的时候顺手用了async,await死活不起作用,后来查了一下子,竟然不支持,那没办法就换了一种实现wx.request同步请求的方案 祭出promise来搞一搞,下面直接贴代码,简 ...
随机推荐
- bzoj 1314: River过河 优先队列
1314: River过河 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 26 Solved: 10[Submit][Status][Discuss ...
- C语言预处理运算符
转自C语言预处理运算符 预处理还需要运算符?有没有搞错? ^_^, 没有搞错,预处理是有运算符,而且还不止一个: #(单井号) -- 字符串化运算符. ##(双井号 )-- 连接运算符 #@ ...
- HDU1632+半平面交
模板题 题意:给定两个凸多边形,求出合并后的面积,这个合并后的面积不包括重叠部分. #include<stdio.h> #include<string.h> #include& ...
- 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 ...
- HDOJ多校联合第四场
B题: C题:仅由'A','G','C','T',4个字母组成,给定一个字符串S,|S|<=15,给定一个整数m,以m为长度且仅含4种字母的字符串T,求LCS(S,T)为0,1,2,3....| ...
- 【HDOJ】2430 Beans
这题目用线段树超时了,其实也差不多应该超时.10^6大数据量.看了一下网上的解法是单调队列.大概了解了一下,是个挺有意思的数据结构.首先,需要求满足0<=(S[r]-S[l])%p<=k时 ...
- usaco4.12Fence Rails(迭代加深)
为了这题还去学了下迭代加深 回来还是不会写 只好参考各大神的代码及题解了 二分枚举最大可以切的块数 然后就是各种分析及优化 USACO题解里写了7个优化.. 问题分析 抽象一下就可以发现,算法的本质是 ...
- Understanding Network Class Loaders
By Qusay H. Mahmoud, October 2004 When Java was first released to the public in 1995 it came wit ...
- ASP.NET 導入Excel
常常碰到這種需求,為了避免自己每次寫Code都要東翻西找Sample,乾脆丟上來當備份 此外,也為了方便網路上的大大們Copy Paste方便,小弟已經順便標示要複製程式碼的起始結束位置 在歡樂的貼程 ...
- c# post文字图片至服务器
最近由于项目需要实现c#提交文字及数据至服务器,因此研究了一下c# php数据传送: 下面用一个示例来演示,c# post文字+图片 ,php端接收: post提交数据核心代码(post数据提交) ? ...