2017-10-05 1 views
0

Wie kann ich Fehler in einer async Funktion geworfen fangen. Wie in meinem Beispiel unten:nodejs - Catch Fehler auf jeder tieferen Ebene

I) Arbeitsbeispiel (Error abfangbar)

(async() => { 
    try { 
    // do some await functions 

    throw new Error("error1") 
    } 
    catch(e) { 
    console.log(e) 
    } 
})() 

Console

Error: error1 
    at __dirname (/home/test.js:25:11) 
    at Object.<anonymous> (/home/quan/nodejs/IoT/test.js:30:3) 
    at Module._compile (module.js:624:30) 
    at Object.Module._extensions..js (module.js:635:10) 
    at Module.load (module.js:545:32) 
    at tryModuleLoad (module.js:508:12) 
    at Function.Module._load (module.js:500:3) 
    at Function.Module.runMain (module.js:665:10) 
    at startup (bootstrap_node.js:201:16) 
    at bootstrap_node.js:626:3 

II) Aber wenn ich try-catch außerhalb von async setzen, wird die Ausnahme uncatchable, wie unten:

try { 
    (async() => { 
    throw new Error("error1") 
    })() 
} 
catch(e) { 
    console.log(e) 
} 

Konsole:

Gibt es eine Möglichkeit, Fehler von async, wie in II gezeigt, zu fangen?

Ich muss darum bitten, meinen Code zu vereinfachen, der viele switch-case enthält und ich möchte nicht try-catch in jedem switch-case behandeln.

Grüße,

Antwort

0

Sie verspricht, dieses Problem zu lösen, verwenden können, fangen am Ende der Kette Versprechen hinzufügen helfen, die Asynchron-Fehler abzufangen.

function resolveAfter2Seconds(x) { 
     return new Promise(resolve => { 
      if(x === 'Error'){ 
       throw Error('My error') 
      } 

      setTimeout(() => { 
      resolve(x); 

      }, 2000); 
     }).catch(function (e){ 
      console.log('error-------------------', e) 
     }); 
     } 

     async function add1(x) { 
     const a = await resolveAfter2Seconds('success'); 
     const b = await resolveAfter2Seconds('Error'); 
     return x + a + b; 
     } 

     add1(); 
Verwandte Themen