ES6 系列之非同步處理實戰

2022-08-11 20:03:14 字數 2483 閱讀 7651

我們以查詢指定目錄下的最大檔案為例,感受從

**函式 -> promise -> generator -> async

非同步處理方式的改變。

為了實現這個功能,我們需要用到幾個 nodejs 的 api,所以我們來簡單介紹一下。

readdir 方法用於讀取目錄,返回乙個包含檔案和目錄的陣列。

stat 方法的引數是乙個檔案或目錄,它產生乙個物件,該物件包含了該檔案或目錄的具體資訊。此外,該物件還有乙個 isfile() 方法可以判斷正在處理的到底是乙個檔案,還是乙個目錄。

我們基本的實現思路就是:

fs.readdir獲取指定目錄的內容資訊

迴圈遍歷內容資訊,使用fs.stat獲取該檔案或者目錄的具體資訊

將具體資訊儲存起來

當全部儲存起來後,篩選其中的是檔案的資訊

遍歷比較,找出最大檔案

獲取並返回最大檔案

然後我們直接上**吧。

var fs = require('fs');

var path = require('path');

function findlargest(dir, cb)

stats[index] = stat;

// 事先算好有多少個檔案,讀完 1 個檔案資訊,計數減 1,當為 0 時,說明讀取完畢,此時執行最終的比較操作

if (--counter == 0) )

.reduce(function(prev, next) )

cb(null, files[stats.indexof(largest)])}})

})})

}

使用方式為:

// 查詢當前目錄最大的檔案

findlargest('./', function(er, filename) );

var fs = require('fs');

var path = require('path');

var readdir = function(dir) )

})}var stat = function(path) )

})}function findlargest(dir)

})})

.then(data => )

.reduce((prev, next) => )

return data.files[data.stats.indexof(largest)]

})}

使用方式為:

findlargest('./')

.then(function(filename) )

.catch(function() );

var fs = require('fs');

var path = require('path');

var co = require('co')

var readdir = function(dir) )

})}var stat = function(path) )

})}function* findlargest(dir) )

let largest = stats

.filter(function(stat) )

.reduce((prev, next) => )

return files[stats.indexof(largest)]

}

使用方式為:

co(findlargest, './')

.then(function(filename) )

.catch(function() );

var fs = require('fs');

var path = require('path');

var readdir = function(dir) )

})}var stat = function(path) )

})}async function findlargest(dir) )

.reduce((prev, next) => )

return files[stats.indexof(largest)]

}

使用方式為:

findlargest('./')

.then(function(filename) )

.catch(function() );

es6 系列預計寫二十篇左右,旨在加深 es6 部分知識點的理解,重點講解塊級作用域、標籤模板、箭頭函式、symbol、set、map 以及 promise 的模擬實現、模組載入方案、非同步處理等內容。

如果有錯誤或者不嚴謹的地方,請務必給予指正,十分感謝。如果喜歡或者有所啟發,歡迎 star,對作者也是一種鼓勵。

ES6系列 ES6簡介

2015年6月17日,ecmascript的第六個版本正式發布,該版本正式名稱為ecmascript 2015,但通常被稱為ecmascript 6或者es6。瀏覽器對es6的支援情況 es6主要應用於node.js,如果想用在瀏覽器中,就需要使用轉碼器 將es6 轉成es5 這意味著,可以用es6...

ES6非同步操作之Promise

一直以來覺得非同步操作在我心頭像一團迷霧,可是它重要到我們非學不可,那就把它的面紗解開吧。es6 誕生以前,非同步程式設計的方法,大概有下面四種。非同步 簡單的說 執行順序不是一次連續完成的,中間加入了其他的程式運算,等第一階段準備好了資料,再返回來進行計算。來看看阮一峰老師es6入門中講的的 反覆...

ES6系列之 let const命令

今天講解比較簡單,主要學習es6的let和const。讓大家牢固一下基礎知識。在講解之前讓我們先來了解乙個知識點 什麼叫做塊級作用域?名稱 含義塊級作用域 任何一對花括號中的語句集都屬於乙個塊,在這之中定義的所有變數在 塊外都是不可見的 for var i 0 i 10 i console.log ...