Node.js 如何根据目录中的文件名创建字符串数组
Node.js How can I create an array of strings based on the file names in a directory
这是伪代码:
var fs = require('fs');
var _ = require('lodash');
var fileNames = []
fs.readdir(dirPath, function(err,list){
_.forEach(list, function(f){
fileNames.push(f);
});
});
//Do something with fileNames here
在尝试对文件名做一些事情时,它产生了一个空集合...我该如何设置这段代码,以便我可以使用通过询问特定目录编译的字符串数组
var fs = require('fs');
var _ = require('lodash');
var fileNames = []
fs.readdir(dirPath, function(err,list){
_.forEach(list, function(f){
fileNames.push(f);
});
//Do something with fileNames here
});
您可以随心所欲地执行某些文件 fileNames
,并且您的程序应该仍然 运行。问题是 fileNames
将是一个空数组,除非您仅在 fs.readdir
的回调完成后才进行操作
问题是您期望异步调用立即填充变量,但事实并非如此。异步调用return返回回调中的结果;异步调用之后的代码在回调之前执行。你有两种选择来获得你想要的。
您的第一个选择是像您一样使用异步方法,这是推荐的,但请将您的 "do something with fileNames here" 代码放在正确的位置:
var fs = require('fs');
fs.readdir(dirPath, function(err, fileNames) {
if (err) { /* handle error */ }
//Do something with fileNames here
});
您的第二个选择是使用同步方法,它已经return满足您的要求:
var fs = require('fs');
var fileNames = fs.readdirSync(dirPath);
//Do something with fileNames here
请注意,对于 Node,通常首选异步(第一个)方法,但是如果这是在应用程序启动代码或命令行脚本中,您可能会使用同步方法。
另请注意,这些都没有使用下划线。值(回调中的list
,或同步方法中的return值)是你想要的列表,你不需要填充到另一个变量中。
你所做的是绝对正确的,除了你在错误的地方处理文件,还有一件事你的 dirPath = undefined
var fs = require('fs');
var _ = require('lodash');
var fileNames = [];
dirPath = './';
fs.readdir(dirPath, function(err,list){
console.log(list);
_.forEach(list, function(f){
fileNames.push(f);
});
//Do something with fileNames here
console.log(fileNames);
});
这是伪代码:
var fs = require('fs');
var _ = require('lodash');
var fileNames = []
fs.readdir(dirPath, function(err,list){
_.forEach(list, function(f){
fileNames.push(f);
});
});
//Do something with fileNames here
在尝试对文件名做一些事情时,它产生了一个空集合...我该如何设置这段代码,以便我可以使用通过询问特定目录编译的字符串数组
var fs = require('fs');
var _ = require('lodash');
var fileNames = []
fs.readdir(dirPath, function(err,list){
_.forEach(list, function(f){
fileNames.push(f);
});
//Do something with fileNames here
});
您可以随心所欲地执行某些文件 fileNames
,并且您的程序应该仍然 运行。问题是 fileNames
将是一个空数组,除非您仅在 fs.readdir
的回调完成后才进行操作
问题是您期望异步调用立即填充变量,但事实并非如此。异步调用return返回回调中的结果;异步调用之后的代码在回调之前执行。你有两种选择来获得你想要的。
您的第一个选择是像您一样使用异步方法,这是推荐的,但请将您的 "do something with fileNames here" 代码放在正确的位置:
var fs = require('fs');
fs.readdir(dirPath, function(err, fileNames) {
if (err) { /* handle error */ }
//Do something with fileNames here
});
您的第二个选择是使用同步方法,它已经return满足您的要求:
var fs = require('fs');
var fileNames = fs.readdirSync(dirPath);
//Do something with fileNames here
请注意,对于 Node,通常首选异步(第一个)方法,但是如果这是在应用程序启动代码或命令行脚本中,您可能会使用同步方法。
另请注意,这些都没有使用下划线。值(回调中的list
,或同步方法中的return值)是你想要的列表,你不需要填充到另一个变量中。
你所做的是绝对正确的,除了你在错误的地方处理文件,还有一件事你的 dirPath = undefined
var fs = require('fs');
var _ = require('lodash');
var fileNames = [];
dirPath = './';
fs.readdir(dirPath, function(err,list){
console.log(list);
_.forEach(list, function(f){
fileNames.push(f);
});
//Do something with fileNames here
console.log(fileNames);
});