Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点JS-I Can';t同步使用FS.Stat_Node.js_Fs - Fatal编程技术网

Node.js 节点JS-I Can';t同步使用FS.Stat

Node.js 节点JS-I Can';t同步使用FS.Stat,node.js,fs,Node.js,Fs,我有一个节点js函数。它检查所有文件夹中的特定文件,并将每个文件的上次写入日期与请求日期进行比较。如果有匹配的文件夹,我想存储该文件夹的路径。实际上,我的函数可以工作,但它使日期控件异步。我尝试了fs.statSync,但它也不起作用。当我使用statSync时,我无法获得任何控制台日志输出 console.log('Collected Files - OutsideIF : ' + filesCollected); 它不会向我展示任何东西。甚至没有空的。我的最后一个控制台日志返回空 我在代码

我有一个节点js函数。它检查所有文件夹中的特定文件,并将每个文件的上次写入日期与请求日期进行比较。如果有匹配的文件夹,我想存储该文件夹的路径。实际上,我的函数可以工作,但它使日期控件异步。我尝试了fs.statSync,但它也不起作用。当我使用statSync时,我无法获得任何控制台日志输出

console.log('Collected Files - OutsideIF : ' + filesCollected);
它不会向我展示任何东西。甚至没有空的。我的最后一个控制台日志返回空

我在代码中添加注释。以下是我的职能:

var scanFolders = function(){ 
  // Listing all directories and files in path
  fs.readdir(path,(err,files) => {
    // Creating Variable For Record Result
    var filesCollected = "";
    // Loop for every directory and file
    files.forEach(file=>{
      // If current path is a directory
      if (fs.lstatSync(path+'/'+file).isDirectory()){
        // Check that directory for certain files
        if((fs.existsSync(path+'/'+file+'/'+'LineChart.html')) && (fs.existsSync(path+'/'+file+'/'+'clip.mp4'))){
          // Check last write time for clip mp4
          fs.stat(path+'/'+file+'/clip.mp4', function (err, info){
            var day = info.mtime.getDate();
            var month = info.mtime.getMonth();
            var year = info.mtime.getFullYear();
            if (day < 10) {day = "0" + day;}
            if (month < 10) {month = "0" + month;}
            // Temp Date variable for compare them
            var tempDate = day + '-' + month + '-' + year;
            // I can see this console log it's working perfectly
            console.log('file date : ' + tempDate + ' FileName : ' + file);
            // Compare dates and if they are equal take that path to filesCollected Variable
            if (tempDate == '24-01-2018'){
              filesCollected += file + ';';
            // If i check this code block with console log it's working too.
            }
            // Last loop from this "Collected Files - OutsideIF" log is actually what 
            // i want. I put this for control code flow. But it's returning after 
            // "Collected Files :" console log below. So i can't return that data 
            console.log('Collected Files - OutsideIF : ' + filesCollected);
          });
          //end
        }
      }
    });
    //It's return empty because this code executing first. So i guess fs.stat is async
    console.log('Collected Files : ' + filesCollected);
  })
};
var scanFolders=function(){
//列出路径中的所有目录和文件
fs.readdir(路径,(错误,文件)=>{
//为记录结果创建变量
var=”;
//循环每个目录和文件
files.forEach(文件=>{
//如果当前路径是目录
if(fs.lstatSync(路径+'/'+文件).isDirectory()){
//检查该目录中的某些文件
if((fs.existsSync(path++'/'+file++'/'+'LineChart.html'))和&(fs.existsSync(path++'/'+file++'/'+'clip.mp4')){
//检查剪辑mp4的上次写入时间
fs.stat(路径+'/'+文件+'/clip.mp4',函数(err,info){
var day=info.mtime.getDate();
var month=info.mtime.getMonth();
var year=info.mtime.getFullYear();
如果(天<10){day=“0”+天;}
如果(月<10){month=“0”+月;}
//用于比较它们的临时日期变量
var tempDate=日+'-'+月+'-'+年;
//我可以看到这个控制台日志它工作得很好
log('文件日期:'+tempDate+'文件名:'+file);
//比较日期,如果它们相等,则选择该路径作为变量
如果(临时日期='24-01-2018'){
filescolected+=文件+';';
//如果我用控制台日志检查这个代码块,它也会工作。
}
//这个“收集的文件-OutsideIF”日志的最后一个循环实际上是什么
//我想。我把它放在控制代码流中。但它在之后返回
//“收集的文件:”控制台日志如下。所以我不能返回数据
log('collectedfiles-OutsideIF:'+filescolected);
});
//结束
}
}
});
//它的返回为空,因为这段代码首先执行。所以我猜fs.stat是异步的
log('收集的文件:'+收集的文件);
})
};
从转换为时,需要使用其返回值,而不是传入回调。例如

fs.stat(path, function (err, info){
  ...
} );
大约相当于:

try {
  const info = fs.statSync(path);
  ...
} catch ( err ) {

}
*除了异步和同步之间的区别, 使用const意味着不能在try块中重新分配
info

当您从转换为时,需要使用其返回值,而不是传入回调。例如

fs.stat(path, function (err, info){
  ...
} );
大约相当于:

try {
  const info = fs.statSync(path);
  ...
} catch ( err ) {

}
*除了异步和同步之间的区别,
使用const意味着不能在try块中重新分配
info

当您切换到
fs.statSync
时,您是否也切换到使用
var info=fs.statSync(path+'/'+file+'/clip.mp4')而不是回调?同步I/O函数通常不接受回调。@Paulpro我会按照您的建议更新我的代码,这样就可以了。我是NodeJS的新手。非常感谢你的提示!你可以把它写成答案。好的,我把我的评论转换成了答案。当你切换到
fs.statSync
时,你是否也切换到使用
var info=fs.statSync(path+'/'+file+'/clip.mp4')而不是回调?同步I/O函数通常不接受回调。@Paulpro我会按照您的建议更新我的代码,这样就可以了。我是NodeJS的新手。非常感谢你的提示!你可以把它写成答案。好吧,我把我的评论变成了答案。