fs.exists为什么不提倡使用(Node.js)

2017-05-15  本文已影响813人  陈学谦_

今天在查文档时偶然看到fs.exists不被提倡使用,挺意外的,或许是因为以前没有认真看过文档。在很多程序里都见到在打开路径前先使用fs.exists检查文件是否存在,但没想到这个方法不被提倡使用了。

看了下官方文档中所述的原因

Note that the parameter to this callback is not consistent with other Node.js callbacks. Normally, the first parameter to a Node.js callback is an err parameter, optionally followed by other parameters. The fs.exists() callback has only one boolean parameter. This is one reason fs.access() is recommended instead of fs.exists().

Using fs.exists() to check for the existence of a file before calling fs.open(), fs.readFile() or fs.writeFile() is not recommended. Doing so introduces a race condition, since other processes may change the file's state between the two calls. Instead, user code should open/read/write the file directly and handle the error raised if the file does not exist.

第一段说,fs.exists()的回调参数只有一个参数,并且这个参数是个boolean类型,用于判断文件是否存在。然而Node.js中其他回调函数中第一个参数通常是error,并且后面经常跟着一些可选参数,这就很刺激了。

第二段说,在调用fs.exists()检查文件是否存在,与调用fs.open()之类的方法对这个文件进行操作,这两个操作之间的这段时间程序很可能会改变文件。因此应该推荐用户直接对文件进行操作,再添加个处理错误的事件就好了

而如果你仅仅是要检查该文件是否存在,而不对其进行操作,可以使用fs.access()

上一篇下一篇

猜你喜欢

热点阅读