亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

詳解ES6 系列之異步處理實戰

2019-11-19 12:37:52
字體:
來源:轉載
供稿:網友

前言

我們以查找指定目錄下的最大文件為例,感受從

回調函數 -> Promise -> Generator -> Async

異步處理方式的改變。

API 介紹

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

fs.readdir
readdir 方法用于讀取目錄,返回一個包含文件和目錄的數組。

fs.stat
stat 方法的參數是一個文件或目錄,它產生一個對象,該對象包含了該文件或目錄的具體信息。此外,該對象還有一個 isFile() 方法可以判斷正在處理的到底是一個文件,還是一個目錄。

思路分析

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

  • 用 fs.readdir 獲取指定目錄的內容信息
  • 循環遍歷內容信息,使用 fs.stat 獲取該文件或者目錄的具體信息
  • 將具體信息儲存起來
  • 當全部儲存起來后,篩選其中的是文件的信息
  • 遍歷比較,找出最大文件
  • 獲取并返回最大文件

然后我們直接上代碼吧。

回調函數

var fs = require('fs');var path = require('path');function findLargest(dir, cb) {  // 讀取目錄下的所有文件  fs.readdir(dir, function(er, files) {    if (er) return cb(er);    var counter = files.length;    var errored = false;    var stats = [];    files.forEach(function(file, index) {      // 讀取文件信息      fs.stat(path.join(dir, file), function(er, stat) {        if (errored) return;        if (er) {          errored = true;          return cb(er);        }        stats[index] = stat;        // 事先算好有多少個文件,讀完 1 個文件信息,計數減 1,當為 0 時,說明讀取完畢,此時執行最終的比較操作        if (--counter == 0) {          var largest = stats            .filter(function(stat) { return stat.isFile() })            .reduce(function(prev, next) {              if (prev.size > next.size) return prev              return next            })          cb(null, files[stats.indexOf(largest)])        }      })    })  })}

使用方式為:

// 查找當前目錄最大的文件findLargest('./', function(er, filename) {  if (er) return console.error(er)  console.log('largest file was:', filename)});Promisevar fs = require('fs');var path = require('path');var readDir = function(dir) {  return new Promise(function(resolve, reject) {    fs.readdir(dir, function(err, files) {      if (err) reject(err);      resolve(files)    })  })}var stat = function(path) {  return new Promise(function(resolve, reject) {    fs.stat(path, function(err, stat) {      if (err) reject(err)      resolve(stat)    })  })}function findLargest(dir) {  return readDir(dir)    .then(function(files) {      let promises = files.map(file => stat(path.join(dir, file)))      return Promise.all(promises).then(function(stats) {        return { stats, files }      })    })    .then(data => {      let largest = data.stats        .filter(function(stat) { return stat.isFile() })        .reduce((prev, next) => {          if (prev.size > next.size) return prev          return next        })      return data.files[data.stats.indexOf(largest)]    })}

使用方式為:

findLargest('./').then(function(filename) {  console.log('largest file was:', filename);}).catch(function() {  console.log(error);});Generatorvar fs = require('fs');var path = require('path');var co = require('co')var readDir = function(dir) {  return new Promise(function(resolve, reject) {    fs.readdir(dir, function(err, files) {      if (err) reject(err);      resolve(files)    })  })}var stat = function(path) {  return new Promise(function(resolve, reject) {    fs.stat(path, function(err, stat) {      if (err) reject(err)      resolve(stat)    })  })}function* findLargest(dir) {  var files = yield readDir(dir);  var stats = yield files.map(function(file) {    return stat(path.join(dir, file))  })  let largest = stats    .filter(function(stat) { return stat.isFile() })    .reduce((prev, next) => {      if (prev.size > next.size) return prev      return next    })  return files[stats.indexOf(largest)]}

使用方式為:

co(findLargest, './').then(function(filename) {  console.log('largest file was:', filename);}).catch(function() {  console.log(error);});Asyncvar fs = require('fs');var path = require('path');var readDir = function(dir) {  return new Promise(function(resolve, reject) {    fs.readdir(dir, function(err, files) {      if (err) reject(err);      resolve(files)    })  })}var stat = function(path) {  return new Promise(function(resolve, reject) {    fs.stat(path, function(err, stat) {      if (err) reject(err)      resolve(stat)    })  })}async function findLargest(dir) {  var files = await readDir(dir);  let promises = files.map(file => stat(path.join(dir, file)))  var stats = await Promise.all(promises)  let largest = stats    .filter(function(stat) { return stat.isFile() })    .reduce((prev, next) => {      if (prev.size > next.size) return prev      return next    })  return files[stats.indexOf(largest)]}

使用方式為:

findLargest('./').then(function(filename) {  console.log('largest file was:', filename);}).catch(function() {  console.log(error);});

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩av在线| 97国产在线视频| 成人激情视频在线观看| 欧美一区二区三区图| 久久久久中文字幕| 国产一区二区在线播放| 国产精品一区电影| 亚洲福利在线看| 国模精品系列视频| 成人国产精品久久久久久亚洲| 奇门遁甲1982国语版免费观看高清| 成人网欧美在线视频| 日韩中文在线视频| 黄网动漫久久久| 国产成人精品综合久久久| 欧美影院在线播放| 奇米4444一区二区三区| 午夜精品久久久久久久白皮肤| 亚洲高清久久网| 国产精品人成电影在线观看| 欧美怡红院视频一区二区三区| 国产精品一区二区三区在线播放| 狠狠久久亚洲欧美专区| 欧美视频免费在线| 国产免费成人av| 久久精品久久久久电影| 欧美日韩国产成人在线| 欧美日韩999| 亚洲精品天天看| 亚洲永久免费观看| yellow中文字幕久久| 国产精品久久久久高潮| 久久全国免费视频| 日韩av在线网| 国产精品自产拍在线观| 欧美丰满少妇xxxxx做受| 亚洲综合成人婷婷小说| 久久影院资源网| 日韩av男人的天堂| 中文国产成人精品久久一| 激情久久av一区av二区av三区| 日韩av在线一区| 日日摸夜夜添一区| 日韩中文字幕在线精品| 欧美一级在线播放| 久久精品国产91精品亚洲| 97香蕉久久超级碰碰高清版| 精品夜色国产国偷在线| 国产欧美日韩中文| 日韩av在线高清| 中文综合在线观看| 韩国精品美女www爽爽爽视频| 精品视频在线导航| 欧美午夜宅男影院在线观看| 这里只有精品视频| 欧美亚洲日本网站| 亚洲精品视频免费在线观看| 久久乐国产精品| 97香蕉久久夜色精品国产| 亚洲精品第一页| 国产一区二区激情| 色老头一区二区三区在线观看| 成人羞羞国产免费| 国产精品视频男人的天堂| 欧美精品18videos性欧| 91久久在线播放| 秋霞成人午夜鲁丝一区二区三区| 久久久久久久电影一区| 欧美丝袜一区二区| 国产成人一区二区三区| 精品一区二区三区四区| 中文字幕免费精品一区高清| 欧美日韩一二三四五区| 欧美成人高清视频| 欧美视频在线看| 亚洲精选中文字幕| 亚洲中国色老太| 亚洲精品天天看| 亚洲电影免费观看高清完整版在线| 亚洲精品白浆高清久久久久久| 亚洲成人久久电影| 精品在线小视频| 日韩经典一区二区三区| 亚洲爱爱爱爱爱| 日韩av在线播放资源| 国产精品久在线观看| 亚洲欧美日韩国产中文专区| 亚洲电影第1页| 亚洲乱码一区二区| 国产一区二区三区视频免费| 欧美日韩国产一中文字不卡| 精品亚洲男同gayvideo网站| 日本高清久久天堂| 国产69久久精品成人看| 欧美又大粗又爽又黄大片视频| 国产国语videosex另类| 成人黄色免费在线观看| 欧美日韩国产影院| 国产亚洲人成a一在线v站| 日本免费一区二区三区视频观看| 亚洲精品自拍偷拍| xvideos国产精品| 在线日韩欧美视频| 国模视频一区二区| 亚洲国产精品久久| 综合欧美国产视频二区| 成人免费在线视频网址| 精品视频一区在线视频| 自拍视频国产精品| 亚洲国产精品久久精品怡红院| 国产精品高清网站| 一区二区在线免费视频| 亚洲国产欧美自拍| 亚洲人成欧美中文字幕| 成人a免费视频| 4438全国亚洲精品在线观看视频| 不卡av电影院| 亚洲国产欧美久久| 日本韩国欧美精品大片卡二| 欧美视频在线免费| 91精品国产综合久久男男| 中文字幕日韩高清| 亚洲自拍偷拍色图| 亚洲视频999| 国产精品稀缺呦系列在线| 国产精品日韩在线一区| 91精品视频在线免费观看| 国产午夜精品免费一区二区三区| 尤物99国产成人精品视频| 欧美电影第一页| 久久国产精彩视频| 午夜精品久久久99热福利| 91久久精品国产91久久性色| 久久精品国产亚洲精品| 国产精品情侣自拍| 欧美性猛交xxxx偷拍洗澡| 久久久久久久久久久免费精品| 亚洲福利精品在线| 97香蕉久久夜色精品国产| 亚洲欧洲日产国码av系列天堂| 精品无人国产偷自产在线| www亚洲精品| 久久久久免费视频| 亚洲在线免费视频| 国产美女精品免费电影| 欧美日韩福利在线观看| 91av视频在线免费观看| 亚洲人免费视频| 国产免费一区二区三区在线观看| 亚洲精品美女视频| 亚洲va久久久噜噜噜久久天堂| 8x海外华人永久免费日韩内陆视频| 国产精品久久久久国产a级| 亚洲欧洲黄色网| 欧美裸体xxxx极品少妇软件| 久久久久久久一区二区三区| 91精品国产色综合久久不卡98| 久久久久久久久电影| 欧美另类99xxxxx| 日韩69视频在线观看| 国产99久久精品一区二区永久免费| 成人h视频在线观看播放| 91探花福利精品国产自产在线| 国产97人人超碰caoprom|