Nodejs異步編程

異步函數:異步函數是異步編程語法的終極解決方案,它可以把異步代碼寫成同步的形式,讓代碼不再有回調函數嵌套,使代碼變得更清晰。

        const fn = async () =>{};

        async  function  fn (){}.

1.async關鍵字
普通函數定義前加async關鍵字,普通函數變成異步函數;
異步函數默認返回promise對象;
在異步函數內使用return關鍵字進行結果返回,結果會被包裹在返回的promise對象中;
return代替resolve()方法,throw代替reject()方法;
調用異步函數再鏈式調用throw關鍵字拋出異常,catch方法捕捉異常;
調用異步函數再鏈式調用then方法獲取異步函數執行結果。
async function f() {
    throw ‘發生錯誤’;   //代替reject
    return ‘123’;     //代替resolve
}
f().then((data)=>console.log(data)).catch((err)=>console.log(err))
 2.await關鍵字
await關鍵字只能出現在異步函數中;
await promise,await 後面只能寫promise對象,不能寫其他類型API;
await 關鍵字可以暫停異步函數向下執行,直到promise返回結果。
async function p1() {   return ‘1’ };

async function p3() {     return ‘3’ };

async function p2() {     return ‘2’ } ;

const run = async ()=>{   

let r1 = await p1();   

let r2 = await p2();   

let r3 = await p3();    

console.log(r1);    

console.log(r2);    

console.log(r3) }

run();

 

3.asyncFunctionReadfile.js實例
const fs = require(‘fs’); //改造現有異步函數api 讓其返回promise對象 從而支持異步函數語法

const promisify = require(‘util’).promisify; //調用promisify方法改造現有異步api 讓其返回promise對象

const readFile = promisify(fs.readFile);

const run = async ()=>{    l

et r3 = await readFile(‘./3.txt’,’utf8′);    

let r1 = await readFile(‘./1.txt’,’utf8′);   

  let r2 = await readFile(‘./2.txt’,’utf8′);    

console.log(r3);     

console.log(r1);    

console.log(r2) }

run();

Tags: