转换为异步代码

时间:2016-06-17 09:27:02

标签: javascript node.js

好的,所以我做了这个函数,它读取一个目录并检查每个文件以查看它是文件还是文件夹,如果它是一个文件然后将它返回到数组。 这里:



function readDirr(dir){
  return fs.readdirSync(dir).filter(function(file){
    return fs.statSync(path.join(dir, file)).isFile(); 
  }); 
} 
console.log(readDirr("./uploads/")); //-> outputs a array of filenames 




所以现在我想要异步地做同样的事情。我试过了,但不能让它起作用。任何人都可以解释如何做到这一点,最好有承诺吗? 谢谢!

编辑: 这是我做的功能:



function readDirr(dir){
  return fs.readdirAsync(dir)
  .then(function(files){
    files.forEach(function(file){
      if(fs.statAsync(path.join(dir, file)).isFile()){ //gives error here saying 'undefined is not a function'
        return file; 
      }
    })
  })
}
console.log(readDirr("./uploads/")); 




控制台上的输出是: {_bitField:0,   _fulfillmentHandler0:undefined,   _rejectionHandler0:未定义,   _promise0:未定义,   _reciver0:undefined} 然后在if语句中给出错误

Edir2:我骗了这个:



function readDirr(dir){
  return fs.readdirAsync(dir)
  .then(function(files){
    files.forEach(function(file){
      fs.statAsync(path.join(dir, file))
      .then(function(stat){
        if(stat.isFile()){
          return file; 
        }
      })
    })
  })
}

console.log(readDirr("./uploads/"));



 它摆脱了错误,但它出现了这样:



{ _bitField: 0,
  _fulfillmentHandler0: undefined,
  _rejectionHandler0: undefined,
  _promise0: undefined,
  _receiver0: undefined }




顺便说一句,我不知道为什么这会被标记为重复..

0 个答案:

没有答案