NodeJS fs.readdr-将回调内部作为对象返回

NodeJS fs.readdir - return callback internals as an object?

本文关键字:对象 返回 内部 回调 fs readdr- NodeJS      更新时间:2024-04-26

我正在尝试重构我的代码,使其使用起来更好。我想做的是进行Node回调,并将结果或错误作为JavaScript对象返回。范围界定规则似乎阻止了我这样做,那么有没有一种简单的方法可以做到这一点,或者我被困在回调中了(除非我做了一些奇怪的事情,比如在JavaScript中实现Promises,谷歌搜索揭示了这些天所有酷孩子都在做什么)?

我对JavaScript仍然不太满意——我认为可能有一种更简单的方法可以做到这一点,但我只是没有得到它,因为我对它的使用还不够(例如,我知道使用jQuery,我可以在承诺中设置"this",以访问我的外部范围,但我不确定如何使用Node,或者是否可以)。

/*
 * Retrieves the full list of only the files, excluding subdirectories, in the directory provided.
 *
 * Parameters:
 *   dir: The directory to get the file list from.
 *
 * Return: An object containing either an error message or the fileList as a String array.
 *   e.g.
 *   { errMsg: undefined,
 *     fileList: ["file1.txt", "file2.xlsx"]
 *   }
 */
var getFileList = function (dir) {
  var filterOutDirectories = function (files) {
        return files.map(function (file) {
          return path.join(dir, file);
        }).filter(function (file) {
          return fs.statSync(file).isFile();
        });
      };
  var result = {
    errMsg: null,
    fileList: null
  };
  fs.readdir(dir, function (err, files) {
    if (err) {
      result.errMsg = "Error: Could not retrieve files...'n't" + err;
    } else {
      result.fileList = filterOutDirectories(files);
    }
  });
  console.log(result.fileList); // returns null
  console.log(result.errMsg); // also returns null
  return result;
}

readdir是一个异步调用,因此在回调中设置的变量在调用后不能直接使用。