javascript - 我如何返回这个对象,而不是记录它?

标签 javascript node.js

我有一个静态站点生成器,我想在 templates/partials 文件夹中列出所有可用的部分。我需要将部分列表格式化为以下类型的对象:

var partials = {
  'header': 'partials/header', // from './templates/partials/header.html'
  'footer': 'partials/footer' // from './templates/partials/footer.html'
};

我关注了this example将此 Node 脚本放在一起:

'use strict';

/**
 * Dependencies
 */

var fs = require("fs");
var path = require("path");
var p = 'templates/partials';

/**
 * Scan folder and return object with partials
 */

fs.readdir(p, function (err, files) {
  var obj = {};

  if (err) {
    throw err;
  };

  for (var i = 0; i < files.length; i++) {
    obj[path.basename(files[i], '.html')] = 'partials/' + files[i];
  };

  console.log(obj);
});

当从项目的根目录执行时,它会记录:

{ footer: 'partials/footer.html',
  header: 'partials/header.html' }

这很好,但我想返回它,而不是记录它。我也觉得我写的东西相当笨拙。所以我的问题是,如何返回对象,以及如何使它更健壮?

最佳答案

你应该提供一个回调函数:

function readfiles(callback) {
  fs.readdir(p, function (err, files) {
    var obj = {};

    if (err) {
      throw err;
    };

    for (var i = 0; i < files.length; i++) {
      obj[path.basename(files[i], '.html')] = 'partials/' + files[i];
    };

    callback(obj);
  });
}

这将按如下方式使用:

readfiles(function(files) {
  // Do stuff with files here.
});

回调函数允许IO异步完成;这通常会大大加快代码的速度,因为它不需要等待 IO 完成。在这种情况下,它不是很有用,但回调模式在 Node.js 中很常见,因此最好在此处使用它。

关于javascript - 我如何返回这个对象,而不是记录它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26423839/

相关文章:

node.js - 无法从 Node js中的函数中获得 promise

Node.js 堆快照填充了旧版本代码的字符串

javascript - 谷歌分析即时测试器

javascript - MVC View -> JavaScript-> Controller 方法->Javascript->Div标签

javascript - 如何在仅允许数字和两个特殊字符的html输入中创建模式?

node.js - Express:如何在 app.get() 之外创建函数?

node.js - passportjs facebook 将请求传递给回调

node.js - face-api.js 从磁盘加载图像文件

javascript - 旋转球体纹理 Three.js

javascript - 如何检查json对象是否为null?