javascript – 关于node.js中fs的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 关于node.js中fs的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3281字,纯文字阅读大概需要5分钟。
内容图文
目的
要知道fs.writeFileSync()或fs.writeFile()何时写完一个文件,所以我可以执行另一个函数.
背景
我正在使用fs编写一个文件,为了知道文件写完的时间,我检查了它的文档:
> https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback
阅读之后,我将注意力集中在fs.writeFile()和fs.writeFileSync()上,但我发现文档缺乏,我有疑问.
关于fs.writeFile()的问题
>在写入文件之前,或者在写入文件并将其保存在磁盘中之后,是否调用了回调函数?
关于fs.writeFileSync()的问题
>如果始终返回undefined,我怎么知道是否发生了错误?
>作为同步写入,是否意味着我的代码将被迫等待文件完全写入?
一般的问题
>如果我想同时写两个不同的文件,并在两者完成时执行单个操作,我将如何使用fs.writeFile()?
> NPM中是否有任何用户友好的库来完成这类工作?我搜查了但是我找不到任何令人信服的东西.
结论
我总体上对fs感到困惑,而且我的知识还不足以在我的代码中最大限度地使用它.为了改进,我需要查看更多代码示例,因此首选代码示例的答案.
感谢您的时间 !
解决方法:
首先,这是一个很大的提示.如果文档没有解释某些内容,并且您无法通过简单的测试轻松回答问题,那么您可以随时查看GitHub上的源代码.例如,这里是the source for fs.writeFileSync() on Github.这是开源项目的巨大优势之一.如有疑问,请查看代码.
有时,找到正确的源代码并不容易(GitHub搜索在测试用例代码中的匹配数比在原始代码中多10倍).在这些情况下,您只需在调试器中的自己的代码中设置断点,然后直接进入相关函数.调试器会将您带到源,您可以准确地看到它正在做什么.
现在问你的问题……
Questions about fs.writeFile()
Is the callback function called before the file is written, as it is
being written or after it was written and saved in disk?
在写入文件后(或遇到错误时)调用它.
Questions about fs.writeFileSync()
- How do I know if an error occurred if it always returns undefined?
如果有错误,fs.writeFileSync会抛出异常.您必须使用try / catch来捕获任何异常.
- Being a synchronous write, does it mean that my code will be forced to
wait until the file is fully written ?
是的,同步版本将阻塞,直到文件完全写入.您不会在正常的服务器开发中使用同步版本,因为它会占用主node.js线程.
General questions
If I wanted to write two different files at the same time, and to
perform a single action when both are complete, how would I do it
using fs.writeFile()?
目前这类问题的典型设计模式是使用promises和Promise.all()来跟踪多个异步操作的完成情况.
使用Bluebird promise库:
const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs'));
Promise.all([fs.writeFileAsync(fname1, data1), fs.writeFileAsync(fname2, data2)]).then(function() {
// both async operations are done here
}).catch(function(err) {
// handle error here
});
Bluebird的.promisifyAll()方法用fs模块中的每个异步操作包装一个函数,返回一个promise和带有Async后缀的包装版本的名称,这样fs.writeFile()得到fs.writeFileAsync()返回一个promise而不是直接打回来.然后,您可以使用Promise.all()等Promise控制流来管理或协调多个异步操作.
您不必使用Bluebird库,因为Promises现在内置于node.js(以及ES6规范的一部分),但node.js没有将现有的异步回调函数转换为promise的简单方法返回功能和蓝鸟做.如果你愿意,你可以自己做宣传.
const fs = require('fs');
fs.writeFileAsync = function(fname, data) {
return new Promise(function(resolve, reject) {
fs.writeFile(fname, data, function(err) {
if (err) return reject(err);
resolve();
});
});
}
Promise.all([fs.writeFileAsync(fname1, data1), fs.writeFileAsync(fname2, data2)]).then(function() {
// both async operations are done here
}).catch(function(err) {
// handle error here
});
内容总结
以上是互联网集市为您收集整理的javascript – 关于node.js中fs的问题全部内容,希望文章能够帮你解决javascript – 关于node.js中fs的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。