Node.js最佳实践异常处理-异步/Await之后
Node.js Best Practice Exception Handling - After Async/Await
他们已经是这个主题的一个问题
Node.js最佳实践异常处理
从那时起,domains
甚至被弃用。
现在,在后Async/Await Node.js场景中,我们不应该类似地考虑同步和异步情况,在同步函数中抛出异常,并拒绝异步函数中的promise,而不是在前一种情况下返回Error
实例吗。
let divideSync = function(x,y) {
// if error condition?
if ( y === 0 ) {
// "throw" the error
throw new Error("Can't divide by zero exception")
}
else {
// no error occured, continue on
return x/y
}
}
模拟异步划分操作
let divideAsync = function(x, y) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
// if error condition?
if (y === 0) {
// "throw" the error safely by rejecting the promise
reject (new Error("Can't divide by zero exception"));
} else {
// no error occured, continue on
resolve(x / y)
}
}, 1000);
})
};
因此,同步和异步异常可以以统一的方式处理
let main = async function () {
try {
//const resultSync = divideSync(4,0);
const resultAsync = await divideAsync(4,0);
}
catch(ex) {
console.log(ex.message);
}
}
Node.js最佳实践异常处理的答案是陈旧过时的
没有那么多。这个答案,加上这篇维护良好的博客文章中的列表,是最新的
官方的node.js指南总是一本不错的读物,而且总体方法没有太大变化。
那么,发生了什么变化呢?
- 域已损坏并已弃用。好吧,这是老新闻了
- 典型的"节点式回调"及其错误优先参数只触发一次,不应再使用。这种简单的顺序异步编码风格及其所有问题已被promise和
async
/await
所取代。(注意:事件发射器等是另一种情况( process.on('uncaughtException')
由process.on('unhandledRejection')
补充- promise如果使用正确,还会捕获程序员错误。对于枯燥的顺序异步代码,它们可以替换域
那么,这对通用代码意味着什么呢?
我们不应该类似地考虑同步和异步的情况,在同步函数中抛出异常,在异步函数中拒绝promise,而不是返回
Error
实例吗?
没错。你应该用Error
拒绝你的承诺(或者从async function
拒绝throw
(。
请注意,您很少需要自己致电reject
。有了promise,您应该能够在代码中throw
。如果你做不到,你很可能没有正确使用它们,程序员的错误也不会被发现。
此代码的黄金法则是:永远不要使用不是promise回调的回调。"Promise回调"指的是new Promise
、then
和catch
参数,可能还有库的一些自定义方法(例如finally
(。这就是上面的示例代码出现问题的地方。写得正确,应该读
async function divideAsync(x, y) {
await new Promise(resolve =>
setTimeout(resolve, 1000) // don't even pass a function expression
);
if (y === 0) {
throw new Error("Can't divide by zero exception");
} else {
return x / y;
}
}
相关文章:
- esri javascript异步打印
- JavaScript异步问题
- $translateProvider.useStaticFilesLoader的Angular Translate异步定
- 异步facebook功能
- 异步并行错误
- 在Redux中,我应该在哪里编写复杂的异步流
- 角度异步http自动完成
- 如何从SeleniumWebdriver获取异步Javascript响应
- 如何使用异步调用更改工厂的变量
- 在等待异步任务时永久循环
- 如何在异步函数中使用javascript对象
- 调用后不异步Ajax忽略函数
- learnyounode#9杂耍异步
- 异步获取数据使用JavaScript同步获取数据
- Meteor:异步回调问题
- 如何以异步方式打印q中的项目
- 为什么从异步/等待提案中删除了 await*
- 多个调用者可以使用Babel await关键字订阅同一个异步函数吗?
- Node.js最佳实践异常处理-异步/Await之后
- 为什么我必须将异步关键字放在具有 await 关键字的函数上