Node.js入門筆記?之a(chǎn)sync模塊
前言
前面我們介紹了異步模塊的CPS解決嵌套回調(diào)的方法,但是隨著業(yè)務(wù)的推進(jìn),node的更新方法也越來(lái)越快,對(duì)于異步的處理會(huì)有更多的新的方法來(lái)解決,最常見(jiàn)的當(dāng)然是async模塊來(lái)解決異步請(qǐng)求,這一節(jié)就來(lái)記錄一下async模塊的應(yīng)用,對(duì)異步的處理更進(jìn)一步臺(tái)階
async
async不同于ES2017的新特性,這里的async表示的是node的第三方模塊,也是一個(gè)比較出名的第三方模塊,為了解決異步嵌套的回調(diào)地獄的問(wèn)題,我們可以根據(jù)不同的業(yè)務(wù)場(chǎng)景來(lái)使用不同的方法,如常見(jiàn)的series、map、parallel,我們來(lái)看一下各個(gè)方法是如何使用的
series
const async = require('async'); const fs = require('fs'); function read_a(callback){ fs.readFile("./async/a.txt",function(err,data){ if(err){ callback(err); }else{ callback(null,data); } }) } function read_b(callback){ fs.readFile("./async/b.txt",function(err,data){ if(err){ callback(err); }else{ callback(null,data); } }) } function read_c(callback){ fs.readFile("./async/c.txt",function(err,data){ if(err){ callback(err); }else{ callback(null,data); } }) } async.series([read_a,read_b,read_c],function(err,data){ console.log(data.toString);//aaa,bbb,ccc })
series接受數(shù)組和回調(diào)函數(shù),將異步方法放到一個(gè)數(shù)組中,回調(diào)函數(shù)會(huì)將全部的異步操作結(jié)果返回,順序和數(shù)組中的順序是一致的,series只是嵌套回調(diào)的語(yǔ)法糖,即執(zhí)行一個(gè)操作再進(jìn)行下一個(gè)操作,打印的結(jié)果是aaa,bbb,ccc
由于async是第三方模塊,所以在使用async的時(shí)候也需要像引入fs一樣將async模塊引入
如果引入之后會(huì)發(fā)出一下報(bào)錯(cuò),我們可以在終端運(yùn)行一下npm install async 再重新安裝一下,這里我已經(jīng)親測(cè)并且解決了。
parallel
parallel 的調(diào)用也是會(huì)按照順序返回結(jié)果,但是與其他方法不同的是異步方法中執(zhí)行步驟是并行執(zhí)行的,
執(zhí)行的時(shí)間油耗時(shí)最長(zhǎng)的決定
,parallel的結(jié)果是由所有異步操作完成之后組裝成順序的結(jié)果返回出來(lái)
waterfall
waterfall可以用來(lái)處理多個(gè)連續(xù)的回調(diào):
const async = require('async'); const fs = require('fs'); function read_a(callback){ fs.readFile("./async/a.txt",callback) } function read_b(value,callback){ console.log('last_value',value.toString()); fs.readFile("./async/b.txt",callback) } function read_c(value,callback){ console.log('last_value',value.toString()); fs.readFile("./async/c.txt",callback) } async.waterfall([read_a,read_b,read_c],function(err,data){ console.log(data.toString()); //last_value aaa //last_value bbb //ccc })
我們分別調(diào)用了abc三個(gè)文件,三個(gè)文件的結(jié)果都在第二個(gè)異步中返回出來(lái),這個(gè)方法運(yùn)用起來(lái)更像是回調(diào)的嵌套使用。
map
對(duì)于上面幾個(gè)方法中將方法合并成一個(gè)數(shù)據(jù),map的方法比較特別,接收的一個(gè)數(shù)組是按照參數(shù)合并的,map接收三個(gè)參數(shù),分別是數(shù)組,異步方法,回調(diào)
如果想簡(jiǎn)單的使用map方法,那么將不需要做額外的封裝,可以直接使用readFile方法
let arr = ['./async/a.txt','./async/b.txt','./async/c.txt'] async.map(arr,fs.readFile,function(err,results){ console.log(results); })
如果對(duì)異步方法想要傳參使用的話,可以對(duì)異步方法來(lái)進(jìn)行一個(gè)簡(jiǎn)單的封裝:
const async = require('async'); const fs = require('fs'); function read(path,callBack){ fs.readFile(path,"utf-8",callBack) } let arr = ['./async/a.txt','./async/b.txt','./async/c.txt'] async.map(arr,read,function(err,results){ console.log(results);//[ 'aaa', 'bbb', 'ccc' ] })
async并不是使用所有場(chǎng)合,可以明顯的看出,如果現(xiàn)在需要在上一個(gè)方法的結(jié)果來(lái)確定是否調(diào)用下一個(gè)異步方法,這個(gè)方法就顯得很不適用,下一節(jié)再來(lái)介紹一下Promise的使用。
到此這篇關(guān)于Node.js入門筆記 之a(chǎn)sync模塊的文章就介紹到這了,更多相關(guān)Node.js async 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Wondows下Node.js使用MongoDB的環(huán)境配置
這篇文章主要介紹了詳解Wondows下Node.js使用MongoDB的環(huán)境配置,這里使用到了Mongoose驅(qū)動(dòng)來(lái)讓JavaScript操作MongoDB,需要的朋友可以參考下2016-03-03Node.js+ELK日志規(guī)范的實(shí)現(xiàn)
這篇文章主要介紹了Node.js+ELK日志規(guī)范的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05Node.js成為Web應(yīng)用開(kāi)發(fā)最佳選擇的原因
本篇文章給大家詳細(xì)分析了Node.js 成為 Web 應(yīng)用開(kāi)發(fā)最佳選擇的十個(gè)原因,對(duì)此有需要的朋友參考下。2018-02-02Nodejs回調(diào)加超時(shí)限制兩種實(shí)現(xiàn)方法
這篇文章主要介紹了Nodejs回調(diào)加超時(shí)限制兩種實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2017-06-06關(guān)于express與koa的使用對(duì)比詳解
很多人都在問(wèn)到底該用Koa還是express,所以下面這篇文章就來(lái)給大家再次的對(duì)比了關(guān)于express與koa的相關(guān)資料,通過(guò)對(duì)比大家可以更好的進(jìn)行選擇,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01nodeJS中關(guān)于path.resolve()的用法解析
這篇文章主要介紹了nodeJS中關(guān)于path.resolve()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Node.js Continuation Passing Style( CPS與
這篇文章主要介紹了Node.js Continuation Passing Style,將回調(diào)函數(shù)作為參數(shù)傳遞,這種書寫方式通常被稱為Continuation Passing Style(CPS),它的本質(zhì)仍然是一個(gè)高階函數(shù),CPS最初是各大語(yǔ)言中對(duì)排序算法的實(shí)現(xiàn)2022-06-06