您如何逃避Java中的try / catch hell?

时间:2018-10-26 02:12:47

标签: javascript error-handling

好的,我喜欢(d)使用await / async尝试/捕获。

但是我该怎么办。

我想这样做。

let a = await doAbc();
let b = await do123(a);

它将变成

let a, b;

try {
   a = await doAbc();
} catch(e) {
   a = await doZxc();
}

try { 
   b = await do123(a);
} catch (e) {
   console.log(e);
   return;
}

if (b.data == undefined) {
    return -1;
} else {
    return b;
}

目前,我很后悔。

3 个答案:

答案 0 :(得分:1)

请记住,您可以await进行任何承诺。因此,您可以这样做:

let a = await doAbc().catch(doZxc); // or .catch(() => doZxc())
let b = await do123(a);

甚至

 let b = await doAbc().catch(doZxc).then(do123);

连同其余代码:

try { 
  let b = await doAbc().catch(doZxc).then(do123);
  return b.data == undefined ? -1 : b;
} catch (e) {
   console.log(e);
   return;
}

答案 1 :(得分:0)

如果这是一种逻辑功能,则可以一次尝试将所有await分组,然后根据错误采取措施。

let a
let b
try {
  a = await doAbc();
  b = await do123(a);
} catch (err) {
  // take appropriate action based on err
}

答案 2 :(得分:0)

创建函数首先返回a,然后使用第一个函数返回的值创建b,就像这样的代码

function firstCode(){
    try {
       a = await doAbc();
    } catch(e) {
       a = await doZxc();
      }
    return a;
}
function secondFunction(){
try { 
   b = await do123(firstFunction());
} catch (e) {
   console.log(e);
   return;
}
}