gpt4 book ai didi

javascript - Node.js 错误抛出被称为不好的做法,但对于 TDD 来说是必不可少的

转载 作者:搜寻专家 更新时间:2023-10-31 23:36:02 24 4
gpt4 key购买 nike

我听很多人说在 Node 中抛出错误是不好的做法,你应该通过 CommonJS 的回调语法手动处理它们:

somethingThatPassesAnError( function(err, value) {
if (err) console.log("ERROR: " + err);
});

然而,我发现在多个单元测试框架(Mocha、Should.js、Gently)中,它们似乎希望你在某些情况下抛出错误发生。我的意思是,当然,你可以设计你的测试来检查变量的相等性并检查错误变量中的非空值,但用 Ryan Dahl 自己的话来说,“你应该编写你的框架来使正确的事情容易做并且错误的事情很难做”。

那么是什么给了?谁能解释为什么存在这种做法?如果找不到模块,我是否应该开始抛出像 require() 这样的致命异常?

最佳答案

这是因为 nodejs 程序通常会大量使用异步,因此在 try/catch 已经成功完成后通常会抛出错误。考虑这个人为的例子。

function foo(callback) {
process.nextTick(function() {
if (something) throw "error";
callback("data");
});
}

try {
foo(function(data) {
dosomething(data);
});
} catch (e) {
// "error" will not be caught here, as this code will have been executed
// before the callback returns.
}

回调中的第一个参数是错误的典型 Node 模式避免了这个问题,提供了一种从异步代码返回错误的一致方法。

function foo(callback) {
process.nextTick(function() {
if (something) return callback("error");
callback("data");
});
}

foo(function(error, data) {
if (error) return handleError(error);
dosomething(data);
});

关于javascript - Node.js 错误抛出被称为不好的做法,但对于 TDD 来说是必不可少的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14410959/

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