javascript - 使用异步函数中的数据

标签 javascript node.js

我对异步函数以及如何在函数返回结果后发送某些内容有疑问。这就是我想要实现的目标:

在 Node 中处理 GET 请求时,我读取了文件夹的内容,并返回该文件夹中的文件。接下来,我想循环访问该文件夹中每个文件的统计信息,仅加载在特定时间段内创建的文件,最后发送这些文件中的数据作为对请求的响应。它看起来像这样:

array = []

fs.readdir(path, function(err, items) {
    items.forEach(function(item) {
        fs.stat(path, function(err, stats) {
            if (period check) {
                array.push(data)
            }
        })
    })
}

res.send(array)

这种方法最终会发送一个空数组,我已经研究了 Promises,这似乎是这里的解决方案,但我无法让它们在这种情况下工作。使用 fs.statSync 而不是 fs.stat 确实有效,但这大大降低了性能,而且感觉应该可以通过 Promises 实现,但我只是不知道如何实现。

有没有人能解决这个问题?

<小时/>

编辑:关于标记为重复的问题,我尝试先用那里的答案解决我的问题,但没有成功。我的问题有一些嵌套函数和循环,并且比那里给出的示例更复杂。

最佳答案

如果您更喜欢基于 Promise 的方法,请使用此方法:

var path = require('path')

fs.readdir(myPath, function(err, items) {
    var array = [];

    Promise.all(items.map(function(item) {
        return new Promise(function(resolve, reject) {
            fs.stat(path.resolve(myPath, item), function(err, stats) {
                if (err) {
                   return reject(err)
                }

                if (/* period check */) {
                  array.push(data)
                }

                resolve()
            })
        })
    })).then(function() {
        res.send(array)
    }).catch(function(error) {
        // error handling
        res.sendStatus(500)
    })
}

关于javascript - 使用异步函数中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44570085/

相关文章:

node.js - Facebook Messenger 机器人在 4-5 秒后未返回响应

node.js - Node http.大文件传输失败并显示 'ERR_STREAM_PREMATURE_CLOSE'

node.js - 由于内存不足无法完成 promise

Javascript JSON 搜索任何匹配项

javascript - 传递值 <xsl :value-of> to a java script function

javascript - 支持 iOS、Android、WP8 和下拉刷新功能的好的 iScroll 替代品是什么?

javascript - es6对象传播的奇怪行为

javascript - jQuery 不捕获某些按键组合(例如,ZXW)

javascript - Angular 2,如何将值存储在 ngOnInit() 的变量中?

新按钮的 Javascript 事件不起作用