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();