当前位置:嗨网首页>书籍在线阅读

06-错误优先回调

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

14.2.3 错误优先回调

在Node确定其主导地位后,一个叫作错误优先回调的约定产生了。由于回调使异常处理变得很棘手(你马上就会看到),所以需要一个标准化的方式将错误传到回调中。于是就出现了在回调中使用第一个参数来接收错误对象的约定。如果该对象为 null 或者 undefined ,就表示没有错误。

任何时候当处理一个错误优先的回调时,都应该先检查错误参数并且采取合适的措施。比如,在Node中读取一个文件的内容,就坚持采用了错误优先的约定:

const fs = require('fs');
const fname = 'may_or_may_not_exist.txt';
fs.readFile(fname, function(err, data) {
   if(err) return console.error('error reading file ${fname}: ${err.message}');
   console.log('${fname} contents: ${data}');
});

在回调函数中,要做的第一件事就是判断err是否为真。如果为真,就表示在读文件时出错了,程序会将错误报告打印到console中并立即返回(console.error并不是一个有意义的值,同时由于并不会使用这个返回值,所以就把它们合并为一句)。这可能是使用错误优先的回调中最容易被忽视的错误了:开发人员通常都会记得检查错误,还可能把错误记在log中,但是却忘了立即返回。如果函数可以继续执行,它可能要依赖于成功的回调,但实际上回调已经失败了(当然,也有可能回调并不依赖成功的返回,这种情况下出错并且继续运行尚可接受)。

错误优先的回调是Node开发中已经存在的标准(那时承诺还没有被广泛使用),如果在写一个使用回调的接口,强烈建议你坚持遵守错误优先的约定。