目的:在一个文件夹(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')

  

node 使用koa2 异步读文件的更多相关文章

  1. Linux通过AIO进行异步读文件

    下面列出源代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <a ...

  2. node.js学习(5)读写文件(同步异步)

    1 导入文件系统库 # 同步的 读文件 写文件 # 异步 需要用异步处理耗时

  3. 【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制

    转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93% ...

  4. node核心:异步流程控制

    Node.js的异步是整个学习Node.js过程中重中之重. 1)异步流程控制学习重点 2)Api写法:Error-first Callback 和 EventEmitter 3)中流砥柱:Promi ...

  5. 分享Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站

    这是个什么的项目? 使用 Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站. 博客线上地址:www.boblog.com Github地址:https: ...

  6. 极简 Node.js 入门 - 3.2 文件读取

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  7. node中的可读流和可写流

    javascript的一个不足之处是不能处理二进制数据,于是node中引入了Buffer类型.这个类型以一个字节(即8位)为单位,给数据分配存储空间.它的使用类似于Array,但是与Array又有不同 ...

  8. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  9. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

随机推荐

  1. 【下一代核心技术DevOps】:(一)容器服务的Rancher选型

    为什么说是下一代核心技术 其实经过互联网的多次变革说起,早期的C/S架构,到后来的B/S架构,一直到现在最普遍的M/S架构,他们的背后都是技术不断的优化改进,以适应促进IT技术的发展 整体而言在过去1 ...

  2. Python爬虫(十四)_BeautifulSoup4 解析器

    CSS选择器:BeautifulSoup4 和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据. lxml只会局部遍历,而B ...

  3. Nginx限速模块初探

    Nginx限速模块分为哪几种?按请求速率限速的burst和nodelay参数是什么意思?漏桶算法和令牌桶算法究竟有什么不同?本文将带你一探究竟.我们会通过一些简单的示例展示Nginx限速模块是如何工作 ...

  4. recover all files with git

    leon@DGLIRUAN2 /F/linux/android/leon/workspace/AngoWidget (master) $ git log commit 2f847e3a858ecb2f ...

  5. html5视频标签

    <video width="200" height="200" poster="img/shamo.jpg" src="vi ...

  6. 转:java单例设计模式

    本文转自:http://www.cnblogs.com/yinxiaoqiexuxing/p/5605338.html 单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton ...

  7. python中对象、类型和元类之间的关系

    在python中对象.类型和元类构成了一个微妙的世界. 他们有在这个世界里和平共处,相辅相成.它们遵循着几条亘古不变的定律: 1.python中无处不对象 2.所有对象都有三种特性:id.类型.值 3 ...

  8. 深入理解计算机系统_3e 第三章家庭作业 CS:APP3e chapter 3 homework

    3.58 long decode2(long x, long y, long z) { int result = x * (y - z); if((y - z) & 1) result = ~ ...

  9. 由一道bash jail题引出的琐事@_@

    关键词:Terminal devices.shell.stdio 题目入口: (需要注册) root@kali:~# ssh level1@24.37.41.154 -p 1016 level1@24 ...

  10. navicat创建存储过程、触发器和使用游标

    创建存储过程和触发器 1.建表 首先先建两张表(users表和number表),具体设计如下图: 2.存储过程 写一个存储过程,往users表中插入数据,创建过程如下: 代码如下: BEGIN #Ro ...