Es scheint, dass Sie bei einem asynchronen Stack-Trace sind, wo Ihr Code aufgerufen nicht in dem Stapel mit Ausnahme für den Rückruf, weil Ihr Code abgewickelt/fertigt und dann der Asynchron Rückruf wurde ist.
Alle .then()
-Handler für alle Versprechen werden asynchron mit einem sauberen Stapel bezeichnet. Das ist nach der Spezifikation des Versprechens. So verspricht immer den aktuellen Thread der Ausführung ausreden und entspannen und dann feuern sie .then()
Handler ohne Benutzercode auf dem Stapel, wenn der Rückruf aufgerufen wird. Was Sie beschreiben, ist, wie synchrone Code funktionieren würde, nicht asynchroner Code. Wir könnten viel spezifischer statt theoretisch sprechen, wenn Sie tatsächlichen Code zeigen und beschreiben, wo Sie den Call-Stack betrachten.
Async Fortschritt hat oft mit der Protokollierung verfolgt werden, weil sie nicht so leicht durch sie treten kann und man kann nicht einfach brechen und zwar sowohl bei Stack-Traces aus.
Als ein wenig einfacheres Beispiel zu betrachten:
function foo() {
setTimeout(() => {
console.log("timer"); // set breakpoint here
}, 100);
}
foo();
Die Funktion foo()
hat die Ausführung beendet und kehrte vor dem Rückruf aufgerufen wird und damit der Stack-Trace wird nicht von Ihrem Code (andere als nur die Rückruf) darauf.
Während .then()
Handler einen etwas anderen Scheduler als setTimeout()
verwenden, ist das Prinzip das gleiche.
könnte ich ahne, dass Sie bei einem asynchronen Stack-Trace sind, wo der Code nicht in dem Stapel mit Ausnahme für den Rückruf ist, weil Ihr Code abgewickelt/beendet und dann wurde der Asynchron-Rückruf aufgerufen. – jfriend00
Gibt es einen Weg, dass ich dies bestätigen kann, ist das tatsächlich das Problem? Ich benutze Versprechungen und gebe alle zu ihren Elternversprechen zurück, also würde ich erwarten, dass es eine ununterbrochene Anruf-Ablaufverfolgung vom ursprünglichen Quellcode zum Haltepunkt gibt. – sabrehagen
Alle '.then()' Handler für alle Versprechen werden asynchron mit einem sauberen Stapel aufgerufen. Das ist nach der Spezifikation des Versprechens. Also, Versprechungen lassen immer den aktuellen Thread der Ausführung beenden und abwickeln und dann feuern '.then()' Handler ohne Benutzercode auf den Stack, wenn der Callback aufgerufen wird. Was Sie beschreiben, ist, wie synchrone Code funktionieren würde, nicht asynchroner Code. Wir könnten viel spezifischer statt theoretisch sprechen, wenn Sie tatsächlichen Code zeigen und beschreiben, wo Sie den Call-Stack betrachten. – jfriend00