nodeJS:使用koa2 异步读文件

8 篇文章 0 订阅
3 篇文章 0 订阅

读取文件的异步想不到要这么写,学到了:原文地址:https://www.cnblogs.com/gsgs/p/7056658.html

知识点:

async 函数与 await 。只有在async函数内部,才能使用await,await等的必须是promse对象,当promise对象resolve()时,await语句执行完毕。

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

下面的功能时:在一个文件夹(image)中有很多文件夹和文件,排除掉文件,将所有文件夹找出来
事实上,看完这短短代码,其他koa异步读写文件度可以解决了,看完文章受益匪浅,

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执行完过后,在接着执行下面的语句<br>   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')

真滴感谢原作者,再贴出原文章地址:https://www.cnblogs.com/gsgs/p/7056658.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值