Promise和co都搞过了,终于还是忍不住要折腾,上ES7的终极方案:async/await。
async/await也是和Promise配合使用的, 先来看一下示例代码,这个用法和我们之前讲的co的用法是极其相似的:
function myAsyncFunc() {
return new Promise(function (resolve, reject) {
setTimeout(function () {
console.log("myAsyncFunction done!");
resolve({data: "Hello,World"});
}, 5000);
});
}
async function test() {
var result = await myAsyncFunc();
console.log(result.data); //Hello,World
}
test();
要在小程序中使用async/await的话,靠微信web开发者工具中的Babel转换工具是不够的了,因为需要一些额外的Babel插件来编译使用了async/await的代码。所以这次我们得自己写脚本来调用Babel。
在项目中,我们得先关闭“开启ES6转ES5”这个选项,因为我们现在要自己来做这件事情。
关闭选项
然后,我准备用Gulp来写我的脚本,从Gulp中调用Babel来编译我的代码。当然你也可以用你其他的工具如Grunt, Webpack之类的,你可以参考这里来了解如何在你使用的build工具中使用Babel。
重要的一点是,我们调用Babel时,需要给我们的Babel配置插件以支持async/await,比如async-to-generator,async-generator-functions等插件。方便起见,直接使用preset(也就是官方配置好的插件包),es2017或latest这两个preset其中之一都能满足我们的需要。
这是Babel的配置文件:.babelrc
{
"presets": [ "latest" ],
"plugins": []
}
然后在我的gulpfile.js中,我会将我的小程序项目下所有的js文件都通过Babel编译:
gulp.task('scripts', () => {
return gulp.src('./src/**/*.js')
.pipe(babel())
.pipe(gulp.dest('./dist'))
})
好了,这是我们编译我们的代码所要做的工作。接下来,我们讲一下在小程序代码中要做的一些改动:
1. 引入generator支撑库
经过Babel转译后的代码,会把aysnc/await的功能通过类似co库的方式来实现,即要使用到generator,所以,和我们使用co的时候一样,需要依赖一个regeneratorRuntime,才能支持generator特性。我们可以使用Facebook开源的regenerator库。你可以通过npm来下载这个regenerator库:
1
npm install regenerator
然后将下载文件中名为regenerator-runtime.js的文件拿出来,放到我们的小程序代码中去。
2.引入代码
在需要使用async/await特性的代码文件中,引入regenerator库:
1
const regeneratorRuntime = require('../../libs/regenerator-runtime')
然后,你就可以放心的在你的代码里使用async/await来写异步处理了。
分享到:
相关推荐
我们可以在小程序的Page页面、Component组件或App实例中定义异步方法,并使用async和await关键字。以下是一个示例: ```javascript Page({ /** * 页面的初始数据 */ data: { num: 0 }, /** * 生命周期...
《煎蛋微信小程序源码详解》 煎蛋微信小程序源码是开发者们探索微信小程序开发的一个宝贵资源。本文将深入解析这个源码,帮助你理解微信小程序的开发流程、架构设计以及实现细节。 1. 微信小程序简介: 微信小程序...
这个项目基于JavaScript(JS)编写,是学习和实践微信小程序开发的优秀实例。 【标签】 1. 微信小程序:微信小程序是一种轻量级的应用开发平台,由腾讯公司推出,无需下载安装即可使用,具有便捷的开发工具和丰富的...
如果需要在同步环境中处理返回结果,可以考虑使用Promise或async/await语法,将异步操作转化为同步的编程模式。 总的来说,`wx.request`是微信小程序进行网络通信的核心工具,开发者需要理解其工作原理和注意事项,...
在微信小程序中,JavaScript同样用于处理页面生命周期、网络请求、事件处理等任务。 结合`vueAndMiniApp-master`这个项目,我们可以推测这是一个包含Vue.js前端应用和微信小程序的综合项目。开发者可能通过Vue.js...
2. 函数与回调:理解异步编程,如Promise和async/await,处理网络请求和事件。 3. 对象和数组操作:熟悉Object对象的方法,如`Object.assign`,以及数组的`map`、`filter`、`reduce`等方法。 四、Vue.js特性 1. ...