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