【问题标题】:React-native-fs : How to use readDir recursively using .map()?React-native-fs:如何使用 .map() 递归地使用 readDir?
【发布时间】:2020-06-28 15:28:44
【问题描述】:

我尝试使用 react-native-fs 获取文件夹中可用的所有文件和目录。

我创建了一个函数来递归获取文件夹中的所有文件和目录,我这样调用这个函数:

const data = await scanDir(path);

我第一次尝试使用 .map() 函数,但我的函数只返回一些元素

async function scanDir(pathOfDirToScan, data = {directory: [], files: []}) {
  const readedFilesAndDir = await FS.readDir(pathOfDirToScan);

  Object.keys(readedFilesAndDir).map(async key => {
    if (readedFilesAndDir[key].isDirectory()) {
      const directoryPath = pathOfDirToScan + '/' + readedFilesAndDir[key].name;
      data.directory.push(directoryPath);
      data = await scanDir(directoryPath, data);
    } else {
      data.files.push(pathOfDirToScan + '/' + readedFilesAndDir[key].name);
    }
  });

  return data;
}

似乎我的函数在第一次执行 map 后返回数据,但之后函数继续。

然后我尝试使用 for 循环,它按预期工作

async function scanDir(pathOfDirToScan, data = {directory: [], files: []}) {
  const readedFilesAndDir = await FS.readDir(pathOfDirToScan);

  for (let i = 0; i < readedFilesAndDir.length; i++) {
    if (readedFilesAndDir[i].isDirectory()) {
      const directoryPath = pathOfDirToScan + '/' + readedFilesAndDir[i].name;
      data.directory.push(directoryPath);
      data = await scanDir(directoryPath, data);
    } else {
      data.files.push(pathOfDirToScan + '/' + readedFilesAndDir[i].name);
    }
  }

  return data;
}

我应该怎么做才能使用 .map() 使函数正常工作?

【问题讨论】:

    标签: react-native array.prototype.map react-native-fs


    【解决方案1】:

    FS.readDir(dirpath) 根据docs 返回一个对象数组。在这种情况下,迭代不需要Object.keys(obj),只需readedFilesAndDir.map() 即可完成您的任务。

    复制并粘贴您自己的代码并进行一些更正。希望对您有所帮助:

    async function scanDir(pathOfDirToScan, data = {directory: [], files: []}) {
      const readedFilesAndDir = await FS.readDir(pathOfDirToScan);
    
      readedFilesAndDir.map(async eachItem=> {
        if (eachItem.isDirectory()) {
          const directoryPath = pathOfDirToScan + '/' + eachItem.name;
          data.directory.push(directoryPath);
          data = await scanDir(directoryPath, data);
        } else {
          data.files.push(pathOfDirToScan + '/' + eachItem.name);
        }
      });
    
      return data;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多