Javascript node.js中的错误处理
在node.js中,异步函数具有回调,但只有部分函数具有传递给该函数的err参数。 e、 g.fs.writeFile的参数为errJavascript node.js中的错误处理,javascript,node.js,error-handling,Javascript,Node.js,Error Handling,在node.js中,异步函数具有回调,但只有部分函数具有传递给该函数的err参数。 e、 g.fs.writeFile的参数为err fs.writeFile('message.txt', 'Hello Node', function (err) { if (err) throw err; console.log('It\'s saved!'); }); 但是fs.watchfile没有 fs.watchFile('message.text', function (curr, prev
fs.writeFile('message.txt', 'Hello Node', function (err) {
if (err) throw err;
console.log('It\'s saved!');
});
但是fs.watchfile没有
fs.watchFile('message.text', function (curr, prev) {
console.log('the current mtime is: ' + curr.mtime);
console.log('the previous mtime was: ' + prev.mtime);
});
第一个问题是,为什么一些异步函数在回调中有err参数,而一些没有?
我们应该如何处理那个些不需要的错误呢
另外,就同步函数而言,它们是否都会发出“错误”事件,我们可以通过这种方式订阅并处理错误
var rs = fs.createReadStream("C:\\Temp\\movie.mp4");
rs.on('error', function(err) {
console.log('!error: ', err);
});
最后一个问题:大多数同步函数的名称都是Sync。。。为什么createReadStream没有
谢谢
第一个问题是,为什么一些异步函数在回调中有err参数,而一些没有?我们应该如何处理那个些不需要的错误呢
节点代码中的绝大多数异步函数都符合回调函数的第一个参数是错误的约定。有极少数例外情况,例如,明确记录为不应在正式文档中使用的反模式
特别是在watchFile
的情况下,它只是重复调用回调的API的语义,并且只有在成功时才调用回调,因为这就是监视文件的含义,并且通常操作系统不提供语义为“当此文件系统路径出现任何问题时通知我”的机制,好了
另外,就同步函数而言,它们是否都会发出“错误”事件,我们可以通过这种方式订阅并处理错误
var rs = fs.createReadStream("C:\\Temp\\movie.mp4");
rs.on('error', function(err) {
console.log('!error: ', err);
});
否。节点机制的分类不完整。至少有4种主要范例:
- 同步代码。大多数情况下抛出异常以指示错误,如
,但并非总是如此。例如,JSON.parse
返回parseInt
以指示错误NaN
- 回调风格的异步代码。通常将错误作为第一个参数传递给回调
- 事件发射器/流式样式的异步代码。通常会发出“错误”事件
- 使用承诺的异步代码。不用于节点核心,但在社区中有大量忠诚的信徒。通常通过调用“reject”回调来拒绝承诺,该回调是传递给
的第二个参数李>
createReadStream
将同步返回stream对象,但I/O是异步的,最早在下一个勾号之前不会开始发出事件
我强烈推荐joyent博客上的这篇文章,以全面介绍当前的最佳实践
第一个问题是,为什么一些异步函数在回调中有err参数,而一些没有?我们应该如何处理那个些不需要的错误呢
节点代码中的绝大多数异步函数都符合回调函数的第一个参数是错误的约定。有极少数例外情况,例如,明确记录为不应在正式文档中使用的反模式
特别是在watchFile
的情况下,它只是重复调用回调的API的语义,并且只有在成功时才调用回调,因为这就是监视文件的含义,并且通常操作系统不提供语义为“当此文件系统路径出现任何问题时通知我”的机制,好了
另外,就同步函数而言,它们是否都会发出“错误”事件,我们可以通过这种方式订阅并处理错误
var rs = fs.createReadStream("C:\\Temp\\movie.mp4");
rs.on('error', function(err) {
console.log('!error: ', err);
});
否。节点机制的分类不完整。至少有4种主要范例:
- 同步代码。大多数情况下抛出异常以指示错误,如
,但并非总是如此。例如,JSON.parse
返回parseInt
以指示错误NaN
- 回调风格的异步代码。通常将错误作为第一个参数传递给回调
- 事件发射器/流式样式的异步代码。通常会发出“错误”事件
- 使用承诺的异步代码。不用于节点核心,但在社区中有大量忠诚的信徒。通常通过调用“reject”回调来拒绝承诺,该回调是传递给
的第二个参数李>
createReadStream
将同步返回stream对象,但I/O是异步的,最早在下一个勾号之前不会开始发出事件
我强烈推荐joyent博客上的这篇文章,以全面介绍当前的最佳实践。谢谢!确定是否以事件发射器样式处理异步函数(即,它发出“错误”事件)的最佳方法是什么?createReadStream的文档似乎没有提到它:据我所知,没有办法通过编程了解它,任何称为“stream”的东西都将是事件发射器。但是,是的,通常您阅读文档时,无法通过编程了解基于事件的API,就像无法通过编程确定函数参数的语义一样。谢谢!确定是否以事件发射器样式处理异步函数(即,它发出“错误”事件)的最佳方法是什么?createReadStream的文档似乎没有提到它:据我所知,没有办法通过编程了解它,任何称为“stream”的东西都将是事件发射器。但是,是的,通常您阅读文档时,无法通过编程了解基于事件的API,就像无法通过编程了解API一样