我有一个静态站点生成器,我想在 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/