javascript - 在 Node JS 中使用 Promise

标签 javascript node.js promise

我正在尝试在此代码上使用 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/

相关文章:

javascript - Node testing.test不是一个函数

javascript - Promise 构造函数中的错误处理

javascript - d3JS : Plot lower-density data version of a large data set when zoomed out on line/area chart

javascript - Jquery AJAX promise 在 ajax 失败时总是中断

javascript - 获取 JavaScript 代码中最后一条语句的结果

node.js - 如何在 tfs 构建管道中设置 Angular 7 的环境

node.js - API.ai/Dialogflow 基本文本请求不起作用

node.js - process.env 从 docker-compose 未定义

javascript - 我应该使用什么脚本来实现平滑的 anchor 滚动?我试过的都不起作用

javascript - Ember 2,显示空模型的消息而不是在 hbs 模板中加载,每个或如果