◆ try-catch 書くたび使いづらくてストレスがたまる
◆ try-catch が式だと直ぐに解決しそうなのに
◆ 現実的には do 式しか救いはない

毎回 try-catch とスコープで悩みます
エラーがあるとエラー処理をしたいものの try-catch 文はスコープ的に見やすくなくて嫌です
promise の catch みたいに書けるのがいいのです

function a() {
something().catch(error => {/* ... */})
something2()
}

ですが一番の問題は return できないことです
エラー処理は catch に渡した「関数」で行われているのでここで return をしてもエラー処理が終わるだけです
処理は something() の式の次の something2() へ続きます
やりたいのは a 関数を抜けることです

try-catch 句なら句なのでできるのですがやっぱりスコープが嫌です
try の中でいっぱい処理して全部のエラーを 1 箇所で受け取るという作りなら try-catch は向いてますがそういうことは基本しないです
なにかの処理ごとに try-catch を作ってそれぞれのエラー処理をします
まとめて受け取ると 複数回 fetch するとしたらどの fetch のエラーなのかわかりません
さすがに自分以外の人が使うなら JavaScript のネイティブなエラーメッセージをそのまま表示はしないです
日本語でメッセージを付けるなら どこが悪いかもわかりやすく書くわけでどの処理かも重要です
さすがに stacktrace の行数みるとかありえないので ひとつずつ try-catch してエラーメッセージを付けて return したいです

エラーの場合に修正してそのまま続行よりもなにか処理してそのまま抜けるのほうが多いのにどうしてここまでエラー処理しにくいのでしょうか
catch メソッドで特別な値を返して 次の式で catch 済みのものと判断すれば即 return ということはできなくもないです
しかし その場合は catch に加えて次の行に if + return のセットまで必要になって無駄に長いです

function a() {
const value = await something().catch(error => handled({ error: "B11" }))
if (isHandled(value)) return value.unwrap()

something2()
}

構文的に任意の式の後ろに catch 句を書ければすごい便利なのですけどねー

something() catch {
return { error: "A12", message: "なにかの処理でなにかのエラーが起きました" }
}

これで something() を実行した関数を return できればいいです
余分な部分がなく一番の理想形だと思います
ただこういう構文はさすがに将来的にもないと思うので どうやってもエラー処理をするなら見づらいコードになるしかないのですよね
呼び出された関数が呼び出し元も return できない以上どうしようもないです

可能性があるなら do 式ですが proposal が 1 から進まないですし do 内の return がどうなるかもはっきりしてません
issue で意見はあっても決まってない感じです
句なので do だけじゃなくてその関数を return してくれるのがベストですが Babel の変換では即時実行関数を return するだけでした
つまり do を抜けるだけです
句を抜けるなら break でいいと思うのですけどね

do try-catch の理想

async function a(){
const res = do {
try { await fetch() }
catch (err) { return { error: "fetch error" } }
}
const value = do {
try { await res.json() }
catch (err) { return { error: "json error" } }
}
return value
}

こう書けるのがいいです
catch 句中の return で a 関数を抜けたいです

これを見てると try-catch が式で try に書いた式を返してくれるだけでもいい気がします

try something() catch { return { error: "A10" } }

理想形と書いたやつと try キーワードがあるくらいしか変わりません
文なくして全部式な言語だったら良かったのに
if も ?: でわかりづらいことにもならなかったのに