我只想过滤掉给定路径中的目录.但是在异步模式下.

|-database
    |- more files...
|-events-list
    |- more files...
|-year-summary
    |- more files...
|-year-summary.xlsx

前三项是子目录.

#!/usr/bin/env node
const fs = require('fs')
const path = require('path')
const dir = 'C:\\Users\\xxx\\Development\\mbes32-events\\src\\reports'

function testSync() {
    let items = fs.readdirSync(dir)
    let dirs = items.filter(function (item) {
        let temp = fs.statSync(path.resolve(dir, item))
        return temp.isDirectory()
    })
    console.log({ dirs })
}

testSync()

result: { dirs: ['database', 'events-list', 'year-summary'] }

async function testAsync() {
    let items = await fs.promises.readdir(dir)
    let dirs = items.filter(async function (item) {
        let temp = await fs.promises.stat(path.resolve(dir, item))
        return temp.isDirectory()
    })
    console.log({ dirs })
}

testAsync()

result: { dirs: ['database', 'events-list', 'year-summary', 'year-summary.xlsx'] }

snyc功能按预期工作.但是async函数总是返回起始路径中的每一项.

我已经用了几个月了.但是今天我的程序因为这个失败而崩溃了.

提前感谢.:)

推荐答案

看看你的过滤功能,当你直接使用async与过滤器.

在不等待promise 兑现的情况下返回filter函数.

要使用异步筛选器,可以使用以下命令

async function asyncFilter(arr, predicate) {
    const results = await Promise.all(arr.map(predicate))
    return arr.filter(function (_v, index) {
        return results[index]
    })
}

async function testAsync() {
    let items = await fs.promises.readdir(dir)
    let dirs = await asyncFilter(items, async function (item) {
        let temp = await fs.promises.stat(path.resolve(dir, item))
        return temp.isDirectory()
    })
    console.log({ dirs })
}

通过使用自定义异步过滤函数,可以实现预期的行为.

使用async进行过滤有更多选项,您可以参考this article并进行详细解释.

免责声明:async filter代码片段也来自本文.归功于作者塔马斯·萨利.

Node.js相关问答推荐

自动将Selify打开的Chrome窗口移动到Mac OS中的第三个显示器

如何从谷歌云中部署的应用程序连接到mongoDB Atlas?

Mongoose:如何使用填充进行查找

使用 Google Drive API 按文件夹 ID 检索文件夹的内容

为什么 Cors 在 NodeJS 中不起作用

Next.js 路由不起作用 - 页面未正确加载

在 azure blob 容器之间复制文件

TS[2339]:类型 '() => Promise<(Document & Omit) | 上不存在属性空>'

Promise 和 Azure 语音转文本

使用pm2启动服务器

在路由上使用中间件时,Nodejs Express 应用程序失败

使用正则表达式查找文档,但输入是数组

node.js 中 pdfkit-tables 中的垂直线

Node.js、Cygwin 和 Socket.io 走进一家wine 吧……Node.js 抛出 ENOBUFS,所有人都死了

socket.io 发出回调合适吗?

如何在 MongoDB 上只收听 localhost

node.js 在控制台上显示未定义

react-native run-android 无法识别

node.js 异步库

node.js 中的意外保留字导入