`
hereson
  • 浏览: 1428727 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

微信小程序中异步处理实例详解(async/await)

阅读更多
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来写异步处理了。

分享到:
评论

相关推荐

    一斤代码:微信小程序中异步处理终极方案async/await

    Promise和co都搞过了,终于还是忍不住要折腾,上ES7的终极方案:async/await。 async/await也是和Promise配合使用的, 先来看一下示例代码,这个用法和我们之前讲的co的用法是极其相似的: function myAsyncFunc() { ...

    Async/Await替代Promise的6个理由

    async/await 是写异步代码的新方式,以前的方法有回调函数和Promise。 async/await 是基于 Promise 实现的,它不能用于普通的回调函数。 async/await 与 Promise 一样,是非阻塞的。 async/await 使得异步代码看...

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

    这篇文章主要是想说一下 怎么在微信小程序中使用async/await从而逃离回调地狱 背景 最近一直在搞微信小程序 用的语言是TypeScript 小程序的api都是回调形式 用起来就是各种回调嵌套 我个人很不喜欢 所以一直想用...

    async/await异步处理demo

    async/await异步处理

    微信小程序中使用 async/await的方法实例分析

    主要介绍了微信小程序中使用 async/await的方法,结合实例形式分析了微信小程序中async/await的功能、使用方法及操作注意事项,需要的朋友可以参考下

    Js中async/await的执行顺序详解

    虽然大家知道async/await,但是很多人对这个方法中内部怎么执行的还不是很了解,本文是我看了一遍技术博客理解 JavaScript 的 async/await(如果对async/await不熟悉可以先看下这篇文章)后拓展了一下,我理了一下...

    微信小程序中使用Async-await方法异步请求变为同步请求方法

    微信小程序中有些 Api 是异步的,无法直接进行同步处理。例如:wx.request、wx.showToast、wx.showLoading等。如果需要同步处理,可以使用如下方法: 注意: Async-await方法属于ES7语法,在小程序开发工具中如果...

    小程序如何支持使用 async/await详解

    小程序本身是不支持async/await语法的,但有些应用场景,我们使用async/await会使得代码更简洁,也更易于维护,用过都知道是有多爽的。既然小程序不支持,那我们可以借助 fackbook 开源的 regenerator 来完成这一...

    详解用async/await来处理异步

    昨天看了一篇vue的教程,作者用async/ await来发送异步请求,从服务端获取数据,代码很简洁,同时async/await 已经被标准化,是时候学习一下了。 先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数...

    详解小程序原生使用ES7 async/await语法

    主要介绍了详解小程序原生使用ES7 async/await语法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    python异步编程入门 async/await/asyncio

    但会通过数个实例来简单讲解如何使用async/await/asyncio,让大家快速了解异步编程。 本教程所使用的python版本为python3.7。部分内容属于之前课程的延伸。 在学习本教程之前你需要掌握: 1: python3基础(变量,...

    详解async/await 异步应用的常用场景

    主要介绍了详解async/await 异步应用的常用场景,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    AwaitKit:受 ES8 Async/Await 启发,用 Swift 实现的异步编程库.zip

    AwaitKit:受 ES8 Async/Await 启发,用 Swift 实现的异步编程库.zip,swift的es8异步/等待控制流

    韦_恩带你用好async/await异步多线程(C#5.0引入的特性)源码

    韦_恩带你用好async/await异步多线程(C#5.0引入的特性)源码: 博文请参考地址: https://blog.csdn.net/qq_42539194/article/details/124025155?spm=1001.2014.3001.5501 网盘地址:...

    三分钟学会用ES7中的Async/Await进行异步编程

    本文介绍了三分钟学会用ES7中的Async/Await进行异步编程,分享给大家,具体如下: Async/Await基本规则 async 表示这是一个async函数,await只能用在这个函数里面。 await 表示在这里等待promise返回结果了,再...

    async/await地狱该如何避免详解

    async/await是什么 async/await可以说是co模块和生成器函数的语法糖。用更加清晰的语义解决js异步代码。 熟悉co模块的同学应该都知道,co模块是TJ大神写的一个使用生成器函数来解决异步流程的模块,可以看做是生成器...

    JS中async/await实现异步调用的方法

    Async/Await不需要写.then,不需要写匿名函数处理Promise的resolve值,也不需要定义多余的data变量,还避免了嵌套代码 async声明一个异步函数 await只能在async函数中使用,后面跟一个promise对象 所以在模拟异步...

    JS为什么说async/await是generator的语法糖详解

    首先,比如说有一个异步操作,使用 async/await 语法来以同步模拟异步操作。 使用 async/await 实现一个 sleep 的功能 function sleep(time) { return new Promise((resolve, reject) => { setTimeout(() => { ...

Global site tag (gtag.js) - Google Analytics