我正在尝试在此代码上使用 promise :
//Listando arquivos
app.post('/readList', function(req, res) {
var cleared = false
var readList = new Promise(function(resolve, reject){
fs.readdir(req.body.path, (err, files) => {
files.forEach(file => {
console.log(file)
var fileDetail = {
name: '',
local: true,
filetype: 'fas fa-folder-open',
filepath: '',
isFile: false
}
if(!cleared){
listedFiles = []
cleared = true
}
fileDetail.name = file
fileDetail.filepath = req.body.path + file
fs.stat(req.body.path + file, function(err, stats) {
fileDetail.isFile = stats.isFile()
if(stats.isFile()) fileDetail.filetype = 'far fa-file-alt'
else fileDetail.filetype = 'fas fa-folder-open'
})
listedFiles.push(fileDetail)
})
})
})
readList.then(
console.log('vorta'),
res.end(JSON.stringify(listedFiles))
)
})
我添加了这一行来显示 itens 列表:
console.log(file)
并将此行放在 Promise 之后执行:
readList.then(
console.log('vorta'),
res.end(JSON.stringify(listedFiles))
)
我不知道错误在哪里,但控制台在文件名之前显示“vorta”。 我做错了什么?
最佳答案
这里传递两个参数:
readList.then(
//#1 In this case you're executing the log function and cause that the message is being printed.
console.log('vorta'),
res.end(JSON.stringify(listedFiles)) //# 2
)
所以,你需要传递一个函数
readList.then(function() {
console.log('vorta');
res.end(JSON.stringify(listedFiles));
})
此外,您需要在异步逻辑中调用函数resolve
。
关于javascript - 在 Node JS 中使用 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49071089/