我們以查詢指定目錄下的最大檔案
為例,感受從
**函式 -> 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 ...