這篇文章主要是想說一下 怎麼在微信小程序中使用async/await
從而逃離回調地獄javascript
最近一直在搞微信小程序 用的語言是TypeScript 小程序的api都是回調形式 用起來就是各類回調嵌套 我我的很不喜歡 因此一直想用async/await
以前用TypeScript target到ES2015 能夠用async/await
可是在iphone上表現很差 後來微信開發者工具的更新日誌中又提到 移除了promise
開發者須要自行引入 致使target到ES2015的async/await
也不能用了
最近 TypeScript發佈了2.1版本 從更新日誌中看到 TypeScript2.1 增長了對ES5的async/await
支持
通過實踐 炒雞好用java
TypeScript會把全部async/await
編譯成ES5支持的語法 target ES2015的時候是用yield實現的 到ES5則使用swicth case 實現的
而後在用到async/await
的文件中引入Promise polyfill 微信小程序就能夠正常的工做了git
Promise
是用async/await
的基礎 既然微信移除了 那麼只好手動引入了 ES6 Promiseasync/await
tsconfig.json
TypeScript2.1的更新日誌中說 要在ES5中用async/await
須要在tsconfig.json中的lib
添加promise 從而告訴tsc 我如今要用promise了 編譯的時候注意點 不要瞎報錯es6
{ "compilerOptions": { "lib": ["dom", "es2015.promise", "es5"] } }
引入Promise polyfill
侷限於微信小程序的文件模塊特性 每個用到async/await
的ts文件 都須要引入Promise polyfillgithub
// var Promise = require('./utils/es6-promise.min').Promise;
之因此是註釋狀態 是由於
Promise
是關鍵詞 不註釋掉的話 VS Code會報錯 而且tsc編譯也會報錯typescript
gulpfile.js
在gulpfile中添加一個去掉上面的註釋的任務 並在tsc編譯以後執行 這樣就能夠順利引入Promise polyfill了json
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')); });
我的感受這個辦法有點傻 哪位大神想到更好的辦法 歡迎分享gulp