如何解决js:如果上一个失败,则停止调用下一个函数
我有很多功能,每个功能都会返回ok
状态,并且我想一个一个地调用它们,如果前一个返回错误的ok
状态,我想停止调用下一个。
function func1() {}
function func2() {}
function func3() {}
const ok1 = func1();
if (ok1) {
const ok2 = func2();
if (ok2) {
func3();
}
}
但是在这种代码样式中,我得到了太多嵌套的花括号,如何使它变得更好?
解决方法
如shrys所言,如果您期望真实的值,则可以使用&&
进行链接:
func1() && func2() && func3() && ...;
如果您有很多参数,单行样式会太杂乱:
if (!func1(...)) return;
if (!func2(...)) return;
if (!func3(...)) return;
这些位于函数内部,因此您可以使用return
来构成。
如果您想按原样使用现有函数,那么tadman答案中描述的两种技术都不错。但是,有一种更干净的方法可以解决此问题,但是它需要您修改现有功能:只需抛出一个错误即可。
function func1() {if (fail) throw new Error('Failed')}
function func2() {if (fail) throw new Error('Failed')}
function func3() {if (fail) throw new Error('Failed')}
try {
func1(); // This part becomes much cleaner
func2();
func3();
}
catch (e) {
// Error handling is localized to this block of code
console.log(e.message);
}
理想情况下,我个人喜欢返回一个自定义错误,这样我就知道它是由我自己的代码引起的,我可以正确地处理它们(大多数情况下只是忽略它们),然后重新抛出其他错误类型。但是,是否执行此操作取决于您:
class FunctionFailureError extends Error {
constructor(message) {
super(message);
this.code = 'FUNC_FAIL_ERROR';
}
}
function func1() {if (fail) throw new FunctionFailureError('Failed')}
function func2() {if (fail) throw new FunctionFailureError('Failed')}
function func3() {if (fail) throw new FunctionFailureError('Failed')}
try {
func1();
func2();
func3();
}
catch (e) {
if (e.code === 'FUNC_FAIL_ERROR') {
console.log(e.message);
}
else {
throw e;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。