2016-06-21 9 views
0

Ich habe das Szenario im folgenden Code vereinfacht, weil ich hier keinen Platz habe, um meinen Anwendungsfall zu erklären, aber im Grunde gebe ich einen Fehler vom " fangen "Block eines Versprechens. Wie kann ich den Fehler bekommen, um von diesem catch-Block weitergeleitet zu werden (im Beispiel unten möchte ich, dass der Fehler vom äußeren "catch" -Block des "try/catch", in dem ich meinen Code eingeschlossen habe, gemeldet wird):"new Error()" im Catch-Block-Kontext gefangen

var p = new Promise(function(resolve, reject) { 
 
    setTimeout(function() { 
 
    reject(); 
 
    }, 1000); 
 

 

 
}); 
 

 
try { 
 
    p.then(function() { 
 
    console.log('promise resolved'); 
 
    }).catch(function() { 
 
    throw new Error('I want to get out of this catch block!'); 
 
    }); 
 
} catch (err) { 
 
    console.log('I want to report the error from here' + err.message); 
 
}

+2

'try..catch' ist eine synchrone Anweisung, das geht nicht. Sie können jedoch eine andere '.catch()' ' – elclanrs

+0

Kette Ich habe Ihre letzten Änderungen zurückgesetzt. Du hast eine verständliche Frage gestellt, hast eine Antwort bekommen, die du angenommen hast. Die Gemeinschaft sieht in einem guten Licht keine radikalen Änderungen an der Frage, wenn es erst einmal Antworten gibt, die tatsächlich das in der Frage ausgedrückte Problem lösen, und besonders dann, wenn es eine * angenommene * Antwort gibt. Außerdem ist die neue Frage ein Duplikat von [diesem] (http://stackoverflow.com/questions/26571328/how-do-i-properly-test-promises-with-mocha-and-chai). Gib einfach das Versprechen zurück: Mocha wird die Ablehnung als Fehler betrachten. – Louis

+0

mein schlechtes. Ich dachte, ich brauche noch eine Antwort, aber dann habe ich die Antwort gefunden. – mags

Antwort

1

die catch Handler in einem Versprechen sind ebenso asynchron wie das Versprechen selbst, so dass Sie nicht zurück zur synchronen Fluß/Ausnahmesteuerung von ihnen zurückkehren können. Die Funktion, die Sie in .catch übergeben, kann nicht aufgerufen werden, bis die try/catch Umgebung, die es verlassen hat.

+0

Ja, Sie haben Recht. Mein Beispiel ist schlecht. Ich werde mein Beispiel bearbeiten. Ich teste mit mocha.js und möchte, dass der Fehler an den Testblock weitergegeben wird. Der Test ist asynchron. – mags

+0

@mags in diesem Fall müssen Sie es an den "fertig" Callback übergeben, die Mocha bietet. Ich wette, es gibt bereits ein Beispiel dafür auf SO, das Ihnen helfen könnte. – ssube

+0

Ja, ich versuchte tatsächlich, es als "ausstehend" zurückzugeben. Ich denke, ich muss getan (neues Pending()). Ich werde das versuchen. – mags

Verwandte Themen