node 使用koa2 異步讀文件


目的:在一個文件夾(image)中有很多文件夾和文件,排除掉文件,將所有文件夾找出來

知識點:

async 函數與 await  。只有在async函數內部,才能使用await,await等的必須是promse對象,當promise對象resolve()時,await語句執行完畢。

koa2 app.use() 中,ctx.body不能放在異步環境中。 

 

const http = require('http')
const fs = require('fs')
const koa = require('koa')
const app = new koa()

app.use(async function (ctx, next) {
    ctx.res.setHeader("Access-Control-Allow-Origin", "http://localhost:8080")
    await next() // 執行下一個app.use,當下一個app.use執行完過后,在接着執行下面的語句
   console.log('4') }) app.use(async function (ctx, next) { let files = [] let newfiles = [] await new Promise((resolve, reject) => { // 讀image文件夾 fs.readdir (__dirname + '/static/image', function(err, picFiles) { if(err) ctx.throw(err) files = picFiles // 將所有的文件夾名字放到外面來。 console.log('1') resolve() // resolve過后,await語句才結束 }) }) const stats = function (fileName) { return new Promise((resolve, reject) => { fs.stat(__dirname + '/static/image/' + fileName, function (err, file) { // 查看是否是文件夾 if(file.isDirectory()) newfiles.push(fileName) console.log('2') resolve() }) }) } let promises = files.map(file => stats(file)) // *這兒使用map() 它返回的值組成新的數組promises,每個元素都是stats()函數返回的promise對象。 await Promise.all(promises) // 當所有promise都resolve()后 執行下一步 console.log(3) ctx.body = newfiles // 這個必須放在外面,不能放在promise.all().then()中 }) app.listen('80', '127.0.0.1')

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM