与JavaScript Promises一起,Async函数进一步重写了传统异步代码的构造,因此它更易读,更易于理解。每当我向客户展示编写async
功能的客户代码时,第一反应总是令人惊讶,接着是好奇心,以了解它是如何工作的。
async | async function fetchdata(url){<font></font>
// Do something<font></font>
// Always returns a promise<font></font>
}
|
await 一个例子胜过千言万语以下是基于承诺的示例的重写,以使用。
| 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()