• 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')

      

  • 相关阅读:
    poj 2325 Persistent Numbers (贪心+高精度)
    迷宫 (BFS)
    poj1087 A Plug for UNIX & poj1459 Power Network (最大流)
    hdu 3549 Flow Problem (最大流)
    CodeForces Round #179 (295A)
    poj 1328 Radar Installation
    HTML 网页游戏 2048
    图论加边算法--链式向前星
    c语言 字符版 简易2048
    POJ 2115 C Looooops(扩展欧几里得)
  • 原文地址:https://www.cnblogs.com/gsgs/p/7056658.html
Copyright © 2020-2023  润新知