有没有一种简单的方法可以进行单线尝试而不被抓住?

时间:2018-12-31 21:39:52

标签: javascript

当我做这样的事情时:

let resolved = null;
try {
    resolved = require.resolve(modulePath)
} catch (e) {

}

我想知道是否有一个较短的语法,例如:

let resolved = null;
try resolved = require.resolve(modulePath)

有没有办法在不打开捕获块的情况下原谅这条线?

有些类似的东西,但我正在寻找更自然的东西:

function t (fn, def) {
    let resolved = def;
    try {
        resolved = fn()
    } catch (e) {

    }
    return resolved;
}

3 个答案:

答案 0 :(得分:5)

否;有意使JavaScript try块必须具有catchfinally。来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch#Description

  

try语句由一个try块组成,该块包含一个或多个语句。即使对于单个语句,也必须始终使用{}。必须存在至少一个catch子句或finally子句。

(请注意,try { ... } finally { }没有catch,它与您想要的内容在相反:您希望一切被捕获并吞没了,而try { ... } finally { }却没有抓住任何东西。)


对于您而言,我认为最好的书写方式是:

let resolved;
try {
    resolved = require.resolve(modulePath);
} catch (e) {
    resolved = null;
}

这清楚表明resolved == null是错误情况。

(更好的做法-添加一些逻辑以确保捕获到的异常确实是您所期望的异常。您可能不想静静地吞下意外错误所导致的异常!)

答案 1 :(得分:2)

  

有什么办法可以原谅这条线而又不会引起任何关注   阻止?

是的,如果您实现finally子句。
除此之外,
尝试总是伴随着{strong> catchfinally

答案 2 :(得分:0)

正如其他答复者已经指出的那样,您需要提供catchfinally

顺便说一句,实现高阶函数有什么问题?

const valueOrNull = f => {
  try {
    return f ()
  } catch (e) {
    return null
  }
}

const output1 = valueOrNull (() => { throw Error () })
const output2 = valueOrNull (() => "hello world")

console.log ('output1', output1)
console.log ('output2', output2)