gpt4 book ai didi

node.js - fs.writeFile 回调永远不会被调用,与 WritableStream.write 等相同

转载 作者:搜寻专家 更新时间:2023-11-01 00:23:59 34 4
gpt4 key购买 nike

我正在写一个小文本文件 (~500B),但奇怪的是,如果我使用 fs.writeFile(..)(或 WriteableStream 的写入/结束方法)等异步方法写入,我会得到一个空文件。

这个有效:

var scanInfo = getScanInfo( core ); // returns several lines delimited by \r\n
fs.writeFileSync( filename, scanInfo, 'ascii' );

这会创建一个空文件并且回调函数不会产生任何输出:

var scanInfo = getScanInfo( core );
scanInfo.push('') ;
scanInfo = scanInfo.join(DOS_CRLF);
fs.writeFile( filename, scanInfo, 'ascii', function ( err ) {
if(err) { console.error('Failed'); console.error(err) ; }
else { console.log('OK'); }
});

我一直在寻找类似的帖子,但在其中我发现问题出在其他地方(调用另一个函数返回内容)但我的内容是一个文本字符串(通过调试验证)。

类似的帖子:fs.writeFile() doesn't return callback

平台> Win8.1 x64

NodeJS> x64 0.12.0

附言使用实际写入文件的函数的应用程序是使用回调以“普通 nodejs”风格编写的,但随着它变得越来越复杂,我使用 Q 和 Q-IO 重写了主处理流。所以现在处理是这样开始的:

(在主模块中)

var qfs = require('q-io/fs') ;
...
qfs.read( configFile )
.then( doSomeConfig )
.then( function( config ) {
var promise = qfs.read( config.inputFile, someOptions );
return promise ;
})
.then( processMyInputData /* (binaryData) returns {Core} */ )
.then( writeMyOutputData /* (core) returns {undefined} */ )
.fail( reportSomeErrors /* (reason) returns {undefined} */ )
.done( reportFinished ) ;

要点是在主流中 fail 函数也从不报告任何问题。函数 reportFinished() 报告一切正常,没有地方可以抛出任何异常,因为上面的原始片段是位于另一个模块中的函数,作为 writeMyOutputData(core) 的一部分调用,永远不会调用回调,因此它不可能进行任何异常抛出或任何类型的错误处理。

然而,在阅读了 Joseph 的评论后,我怀疑标准 fs 模块和 q-io/fs 之间可能存在一些干扰

最佳答案

好的,仔细调试后发现问题。正如 Joseph 提到的,与 fs.writeFile() 完全无关。

在我的应用程序中,实际上有两个文件写入“同时”运行。我的问题中列出的一个和另一个在计算一些平均值时逐渐写入数据。

另一个渐进式编写函数有一个错误(变量名称拼写错误),导致在操作过程中(在连续写入之间)抛出引用错误。这个异常,出于某种我不太明白的原因,并没有出现在链中的任何地方。根据 Q 文档,Promise.done() 应该抛出任何未处理的异常,但事实并非如此。

在 promise 链中添加了几个 fail() 处理程序后,我能够找到错误并实现整个应用程序的合理行为。

因此,该错误与糟糕的编程风格(未正确处理异常)有关,而不是与 fs 模块有关。但是,我无法相信会有未处理的异常这样的事情可能会丢失并且永远不会出现在白天。我也很难相信异步操作 B 中的异常会影响另一个不相关的异步操作 A

关于node.js - fs.writeFile 回调永远不会被调用,与 WritableStream.write 等相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30307208/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com