2017-05-16 1 views
0

Ich habe eine Reihe von Funktionen enthalten, und in einem von ihnen gibt es einen Fehler, aber welcher und wo? Wie kann ich das sehen?Debugging verspricht in meinem eckigen Controller, sehr schwierig ohne Dateiname und Lineno in Fehlermeldung

Dies ist, wo der Browser den Fehler meldet:

Promise.all([findProperties]) 
    .then(makeReport) 
    .then(showReport) 
    .catch(err => { 
     console.log("ERROR: " + err.message); 
     console.log("ERROR: " + err.file); 
     console.log("ERROR: " + err.lines); 
     throw new Error('Higher-level error. ' + err); 
    }) 
    .catch(err => { 
     console.log("reportAgentSaleController ERROR: " + err); 
    }) 

Wie 63 ist die erste console.log

index.js:63 ERROR: Cannot read property 'replace' of undefined 
index.js:64 ERROR: undefined 
index.js:65 ERROR: undefined 
index.js:69 ERROR: Error: Higher-level error. TypeError: Cannot read property 'replace' of undefined 

Es ist wirklich schwer, diese Fehler zu finden, als ich 9 enthält mit Hunderten von Codezeilen voll mit Ersetzungsbefehlen.

Wie kann ich herausfinden, wo und in welcher Datei es schief geht?

EDIT - Der Versuch, mit ablehnen

Hier ist ein Beispiel.
Konsolenprotokoll wird wieder wie diese

here comes the error (line 114) 
err: ReferenceError: conXXXsole is not defined (line 102) 

Der Fehler tatsächlich in Zeile 115, so wie bekomme ich es mir zu sagen, dass sein in der Leitung 115?

function testErr(){ 

    var first = new Promise(
     (resolve, reject) => { 
     if (1==1) { 
      resolve(); 
     } else 
      reject(); 
    }); 


    var second = function(){ 
     var test=funcWithErr('aaa'); 
    } 

    Promise.all([first]) 
     .then(second) 
     .catch(err => { console.log('err: ' + err) } 
)} 


function funcWithErr(text){ 

    console.log ('here comes the error') // line 114 
    conXXXsole.log ('this is the error') // line 115 

    return text; 
} 
+0

try „Debugger“ an Orten, an denen u das Problem ist, denkt. Was das ist, ist es pausiert das Rendering und Sie können dann sehen, was passiert – Plankton

+0

@Plankton wie machst du das? Muss ich etwas in CHROME einschalten oder? – torbenrudgaard

+0

es ist nur "Debugger;" das ist es. Siehe https://www.ng-book.com/p/Debugging-AngularJS/ (siehe Abschnitt "Debugger") – Plankton

Antwort

1

console.log nicht soll es das Debuggen helfen, dann ist es nur Zweck eine Nachricht zu protokollieren ist.

Es gibt eine Reihe von console methods, dass die Ausgangs Call-Stack, nämlich error, warn und trace. Je nach Kontext kann eine davon verwendet werden.

Wenn es sich um einen kritischen Fehler handelt, kann es console.error(error) sein, und wenn es ein Fehler ist, kann es console.warn(error) sein.

Der idiomatische Weg in AngularJS ist $exceptionHandler Service zu nutzen:

$exceptionHandler(error) 

The default implementation simply delegates to $log.error which logs it into the browser console.

Und $log nur verwendet console:

Default implementation safely writes the message into the browser's console (if present).

ES6 Versprechen Implementierung bietet für abgefangene Versprechen Standard-Handler (dieses Verhalten ist wahr für einige moderne Browser und auch core-js Polyfill). Für die Zwecke der Fehler von Debuggen kann in catch und führen zu Fehlern erneut geworfen werden:

.catch(err => { 
    console.log("reportAgentSaleController ERROR: " + err); 
    throw err; 
}) 
+0

Das Problem, das ich mit einem überschriebenen/dekorierten $ exceptionHandler konfrontiert habe, ist, dass der Cause-Abschnitt nicht immer ausgefüllt ist. Also, scheint nicht immer zu mir zu arbeiten. – Plankton

+0

@Plankton Nicht sicher, was Sie meinen. 'cause' ist optional. Und sicher, wenn der Dienst nicht korrekt implementiert wurde, wird dies zu Problemen führen. – estus