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

160 阅读2分钟

与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
在主异步函数中使用异步函数调用前的关键字

一个例子胜过千言万语以下是基于承诺的示例的重写,以使用。
异步函数

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()
解决,然后再转到异步函数中的下一行。结果与纯粹的基于许的方法相同,一系列使用
then()
方法。