use*_*943 2 callback fs node.js
我正在写一个小文本文件(~500B),但奇怪的是,如果我使用fs.writeFile(..)(或WriteableStream的write/end方法)等异步方法编写,我会得到一个空文件.
这有效:
var scanInfo = getScanInfo( core ); // returns several lines delimited by \r\n
fs.writeFileSync( filename, scanInfo, 'ascii' );
Run Code Online (Sandbox Code Playgroud)
这会创建空文件,回调函数永远不会产生任何输出:
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'); }
});
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似的帖子,但在我发现问题是其他的东西(调用另一个函数返回内容)但我的内容是一个文本字符串(通过调试验证).
类似的帖子:fs.writeFile()不返回回调
平台> Win8.1 x64
NodeJS> x64 0.12.0
PS使用实际编写文件的函数的应用程序使用回调以"plain 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 ) ;
Run Code Online (Sandbox Code Playgroud)
关键是在主流中,失败功能也不会报告任何问题.函数reportFinished()报告一切正常,没有地方可以抛出任何异常,因为上面的原始代码段(位于另一个模块中并作为writeMyOutputData(core)的一部分调用)永远不会调用回调,因此它是不可能做任何异常抛出或任何类型的错误处理.
然而,在阅读约瑟夫的评论后,它对他有用,我怀疑标准fs模块和q-io/fs之间可能存在一些干扰
确定,经过仔细的剔除问题确定后.正如约瑟夫所提到的,根本与fs.writeFile()无关.
在我的应用程序中,实际上有两个文件写入"并发".在我的问题中列出的那个和另一个,在计算一些平均值时逐步写入数据.
另一个逐步写入函数有一个错误(拼写错误的变量名称),导致在操作过程中(在连续写入之间)抛出引用错误.由于某些原因我不太了解这个例外,并没有出现在链中的任何地方.根据Q文档,Promise.done()应抛出任何未处理的异常,但事实并非如此.
在promise链中添加了几个fail()处理程序后,我能够找到错误并实现整个应用程序的合理行为.
因此,错误与错误的编程风格(不正确处理异常)而不是fs模块有关.但是,我无法相信可能会出现未处理的异常,这些异常可能会丢失并且永远不会出现在白天.此外,我简直不敢相信,在异步操作异常乙会影响另一个非相关异步操作一个.
| 归档时间: |
|
| 查看次数: |
2277 次 |
| 最近记录: |