2016-01-11 46 views
1

我在nodejs的FS核心中的Sync功能有问题。 比如我有一个文件的NodeJS这个语法节点js FS accessSync设置全局变量路径失败

var y; 
fs.accessSync("real_exixs_path", fs.R_OK | fs.W_OK, function(err) { 
    if (err) { 
    console.log("File error!"); 
    } else { 
    y = "foo"; 
    } 
}); 

运行该代码的全球“Y”变量仍然undefined后,它不会设置为“富”。有人能帮我吗?

+0

@thefourtheye这个问题是不能重复...... 我已经找到了解决办法...的同步功能没有回调参数! fs.access()的同步版本。如果任何可访问性检查失败,则会抛出,否则不执行任何操作。 – r1si

+0

你为什么这么认为? – thefourtheye

+1

@thefourtheye我的问题询问关于同步功能(Sync功能)而不是关于异步。 :) – r1si

回答

0

从FS的NodeJS文档:

fs.accessSync(路径[,模式])#

fs.access的同步版本()。如果任何可访问性检查失败,则会抛出,否则不执行任何操作。

的accessSync功能没有回调参数,所以你需要抛出

这里一个例子:

try{ 
    fs.accessSync("real_exixs_path", fs.R_OK | fs.W_OK) 
}catch(e){ 
    //error 
} 
//success! 
6

接受的答案有错误,它会始终运行“成功”是否文件是否存在。

修正版本:

try{ 
    require('fs').accessSync("filename.ext", fs.R_OK | fs.W_OK) 
    //code to action if file exists 

}catch(e){ 
    //code to action if file does not exist 
} 

,或者在一个函数把它包:

function fileExists(filename){ 
    try{ 
    require('fs').accessSync(filename) 
    return true; 
    }catch(e){ 
    return false; 
    } 
} 
+0

这是为什么?因为你使用了require('fs')'或其他东西? – LarsW

+0

您的问题是关于“接受的答案”中的错误是什么?如果是这样,错误是:“//成功!”代码是在错误的地方 - 它会*总是*运行,无论文件是否存在。正确的行为是“//成功!”只应该在文件实际存在的情况下执行...请参阅上面的示例代码。 –

+0

当然可以。愚蠢的我。这似乎很明显,我甚至没有想到它,所以我认为你的意思是别的东西(比如'fs.accessSync(“real_exixs_path”,fs.R_OK | fs.W_OK)'总是会导致一些奇怪的原因)。 – LarsW