node.js - 一个fs.statSync的问题
迷茫
迷茫 2017-04-17 11:58:13
0
2
553
"use strict";
var fs = require('fs');
var colors = require('colors/safe');
fs.readdir(process.cwd(), function (err, files) {
    files.forEach(function (item, index, array) {
        fs.statSync(item, function (err, stat) {
            if (stat.isDirectory()) {
                console.log(colors.blue(item + '/'));
            }
            else if (stat.isFile()) {
                console.log(colors.green(item));
            }
        });
    });
});

这个程序本来是想打印出当前目录下的文件的,但是如果我把fs.stat换成fs.statSync后,就无法输出了,这是为啥呢? node的版本是v0.12.7

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(2)
阿神

因為statSync 是同步的方法啊,結果直接得到了 也就是 stat = fs.statSync(item) 然後判斷 stat.isDirectory()

阿神

來看nodejs的File System模組提供了很多種方法,這些方法大致可以分別為兩類:一類是異步+回呼的; 一類是同步的。其中stat就是屬於前者,statSync就是屬於後者。來看看使用區別:

1.异步版:fs.stat(path,callback):
    path是一个表示路径的字符串,callback接收两个参数(err,stats),其中stats就是fs.stats的一个实例;
  
2.同步版:fs.statSync(path)
   只接收一个path变量,fs.statSync(path)其实是一个fs.stats的一个实例;

3.再来看fs.stats有以下方法:
    stats.isFile()
    stats.isDirectory()
    stats.isBlockDevice()
    stats.isCharacterDevice()
    stats.isSymbolicLink() (only valid with fs.lstat())
    stats.isFIFO()
    stats.isSocket()

看完這些,你就明白了吧。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板