ITPub博客

首页 > 应用开发 > Javascript > JavaScript ES6值得掌握的五大功能(3)JavaScript异步函数

JavaScript ES6值得掌握的五大功能(3)JavaScript异步函数

原创 Javascript 作者:cenfeng 时间:2019-07-05 13:36:22 0 删除 编辑

与JavaScript Promises一起,Async函数进一步重写了传统异步代码的构造,因此它更易读,更易于理解。每当我向客户展示编写 async  功能的客户代码时,第一反应总是令人惊讶,接着是好奇心,以了解它是如何工作的。

异步功能由两部分组成:

1)以函数为前缀的常规 async 函数

1

2

3

4

async function fetchdata(url){<font></font>

     // Do something<font></font>

     // Always returns a promise<font></font>

     }

2) await 在主Async函数中使用异步函数调用前的关键字。

一个例子胜过千言万语。以下是基于Promise的示例的重写,以使用  Async函数 :

1

2

3

4

五

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

function getasync(url) { // same as original function<font></font>

     return new Promise((resolve, reject) => {<font></font>

         const xhr = new XMLHttpRequest()<font></font>

         xhr.open( "GET" , url)<font></font>

         xhr.onload = () => resolve(xhr.responseText)<font></font>

         xhr.onerror = () => reject(xhr.statusText)<font></font>

         xhr.send()<font></font>

     })<font></font>

}<font></font>

<font></font>

async function fetchdata(){ // main Async function<font></font>

     var text1 = await getasync( 'test.txt' )<font></font>

     console.log(text1)<font></font>

     var text2 = await getasync( 'test2.txt' )<font></font>

     console.log(text2)<font></font>

     var text3 = await getasync( 'test3.txt' )<font></font>

     console.log(text3)<font></font>

     return "Finished" <font></font>

}<font></font>

<font></font>

fetchdata().then((msg) =>{<font></font>

     console.log(msg) // logs "finished"<font></font>

})

上面的例子运行时回显“test.txt”,“test2.txt”,“test3.txt”的内容,最后按顺序“完成”。

正如您所看到的,在 异步 函数内部,我们将异步函数 getasync() 称为同步函数 - 无需 then()  方法或回调函数来指示下一步。只要  await 遇到关键字,执行就会暂停,直到  getasync() 解决,然后再转到Async函数中的下一行。结果与纯粹的基于Promised的方法相同,使用一系列 then() 方法。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69933200/viewspace-2649647/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-06-18

  • 博文量
    125
  • 访问量
    129483