Javascript 在基目录数组中递归查找子目录
出于测试目的,我试图记录3个基本目录中包含多少(子)目录,但结果没有意义。Javascript 在基目录数组中递归查找子目录,javascript,recursion,firefox-addon,Javascript,Recursion,Firefox Addon,出于测试目的,我试图记录3个基本目录中包含多少(子)目录,但结果没有意义。 linux控制台输出与插件输出相比,子目录的数量不匹配,例如 console.log: recursive: 7 console.info: recursive: time taken = 38ms console.log: recursive: 7 console.info: recursive: time taken = 41ms console.log: recursive: 35 console.info:
linux控制台输出与插件输出相比,子目录的数量不匹配,例如
console.log: recursive: 7
console.info: recursive: time taken = 38ms
console.log: recursive: 7
console.info: recursive: time taken = 41ms
console.log: recursive: 35
console.info: recursive: time taken = 330ms
Total time: 7.571605 seconds
Program terminated successfully.
rob@work:~/git/recursiveDirListingFF$ find /home/rob/Pictures/ -mindepth 1 -type d | wc -l
1
rob@work:~/git/recursiveDirListingFF$ find /home/rob/Music/ -mindepth 1 -type d | wc -l
2
rob@work:~/git/recursiveDirListingFF$ find /home/rob/Downloads/ -mindepth 1 -type d | wc -l
37
有人能看一看,并提出可能的问题吗?下面是代码,
main.js
var myBaseDirs = [];
myBaseDirs.push('/home/rob/Pictures');
myBaseDirs.push('/home/rob/Music');
myBaseDirs.push('/home/rob/Downloads');
require("./FileIO").list(myBaseDirs);
var {
Cu
} = require("chrome"),
{
OS
} = Cu.import("resource://gre/modules/osfile.jsm", {});
function compare(a, b) {
if (a.filename < b.filename)
return -1;
if (a.filename > b.filename)
return 1;
return 0;
}
exports.list = function (dirs) {
var audio = [],
dirsTemp = [],
checkedSubdirI = dirs.length - 1,
sTime = new Date().getTime(),
eTime = 0;
for (var w = 0; w < dirs.length; w++) {
dirsTemp.push(dirs[w]);
}
for (var k = 0; k < dirsTemp.length; k++) {
let iterator = new OS.File.DirectoryIterator(dirsTemp[k]);
var promise = iterator.forEach(
function onEntry(entry) {
if (entry.isDir) {
dirsTemp.push(entry);
}
}
);
var onSuc = function onSuccess() {
iterator.close();
if (checkedSubdirI === dirsTemp.length - 1) {
eTime = new Date().getTime();
console.log(dirsTemp.length);
console.info('time taken = ', eTime - sTime + 'ms');
return dirsTemp;
} else {
checkedSubdirI++;
iterator = new OS.File.DirectoryIterator(dirsTemp[checkedSubdirI].path);
promise = iterator.forEach(
function onEntry(entry) {
if (entry.isDir) {
dirsTemp.push(entry);
}
}
);
return promise.then(
onSuc,
onRej
);
}
}
var onRej = function onFailure(reason) {
iterator.close();
eTime = new Date().getTime();
console.info('FAILED reason = ', reason, 'time taken = ', eTime - sTime + 'ms');
throw reason;
}
// Finally, close the iterator
promise.then(
onSuc,
onRej
);
}
};
FileIO.js
var myBaseDirs = [];
myBaseDirs.push('/home/rob/Pictures');
myBaseDirs.push('/home/rob/Music');
myBaseDirs.push('/home/rob/Downloads');
require("./FileIO").list(myBaseDirs);
var {
Cu
} = require("chrome"),
{
OS
} = Cu.import("resource://gre/modules/osfile.jsm", {});
function compare(a, b) {
if (a.filename < b.filename)
return -1;
if (a.filename > b.filename)
return 1;
return 0;
}
exports.list = function (dirs) {
var audio = [],
dirsTemp = [],
checkedSubdirI = dirs.length - 1,
sTime = new Date().getTime(),
eTime = 0;
for (var w = 0; w < dirs.length; w++) {
dirsTemp.push(dirs[w]);
}
for (var k = 0; k < dirsTemp.length; k++) {
let iterator = new OS.File.DirectoryIterator(dirsTemp[k]);
var promise = iterator.forEach(
function onEntry(entry) {
if (entry.isDir) {
dirsTemp.push(entry);
}
}
);
var onSuc = function onSuccess() {
iterator.close();
if (checkedSubdirI === dirsTemp.length - 1) {
eTime = new Date().getTime();
console.log(dirsTemp.length);
console.info('time taken = ', eTime - sTime + 'ms');
return dirsTemp;
} else {
checkedSubdirI++;
iterator = new OS.File.DirectoryIterator(dirsTemp[checkedSubdirI].path);
promise = iterator.forEach(
function onEntry(entry) {
if (entry.isDir) {
dirsTemp.push(entry);
}
}
);
return promise.then(
onSuc,
onRej
);
}
}
var onRej = function onFailure(reason) {
iterator.close();
eTime = new Date().getTime();
console.info('FAILED reason = ', reason, 'time taken = ', eTime - sTime + 'ms');
throw reason;
}
// Finally, close the iterator
promise.then(
onSuc,
onRej
);
}
};
var{
铜
}=要求(“铬”),
{
操作系统
}=Cu.导入(“resource://gre/modules/osfile.jsm", {});
功能比较(a、b){
if(a.filenameb.filename)
返回1;
返回0;
}
exports.list=函数(dirs){
var audio=[],
dirsTemp=[],
checkedSubdirI=dirs.length-1,
时间=新日期().getTime(),
时间=0;
对于(var w=0;w
这被证明是有用的:
//start-helper函数
函数enumChildEntries(路径到dir、委托、最大深度、runDelegateOnRoot、深度){
//重要提示:作为调用此函数的开发人员,`depth`arg必须始终为null/未定义(甚至不要将其设置为0)。此arg用于内部迭代使用
//“delegate”是必需的
//pathToDir是必需的,它是字符串
//max_depth应设置为null/undefined/有什么问题?请查看控制台输出与加载项输出,子目录的数量不匹配。此处的函数存在缺陷,请参阅MDN文档页面上的更新函数:@Noitidart in aFirefox
addon我收到此错误,ReferenceError:Deferred未定义ed
。我应该如何/从何处导入延迟的
。