2017-04-10 9 views
7

Załóżmy, że mam 12 async/await funkcji, a na 12. głębokości występuje błąd. Teraz, mam ten kod, aby złapać wszystkie błędy:Jak uzyskać pełne śledzenie stosu Node.js podczas korzystania z asynchronizacji/czekania?

process.on('unhandledRejection', function { 
    console.error(err); 
    process.exit(1); 
}); 

Problem, tym StackTrace nie powrócił:

ReferenceError: sdfg is not defined 
- get.js:29 Fruit.module.exports [as get] 
    /project/models/fruit/get.js:29:2 
- next_tick.js:129 process._tickDomainCallback 
    internal/process/next_tick.js:129:7 

nad innymi projektami, kiedy używany zwrotnych ze strukturą:

function doSomething(err, done) { 
    if (err) { return done(err); } 
    /* do something */ 
    return done(null, true); 
} 

Następnie miałem niezłe ślady stosu, gdzie wystąpił błąd i kroki, które do niego doprowadziły. Teraz z async/await próbowałem złapać błędy na wszystkich poziomach bez rezultatu. Próbowałem również longjohn i stackup - i nadal otrzymuję tylko ostatnią funkcję, która spowodowała błąd.

Pomoc - jak mogę zobaczyć cały stos ?! I jaki jest właściwy sposób przechwytywania zagnieżdżonych błędów async/await?

EDIT: (kompletny przykład)

const getA = async() => { 
    await getB(); 
} 

const getB = async() => { 
    await getC(); 
    sdgf(); 
} 

const getC = async() => {} 

const start = async() => { 
    await getA(); 
} 

start().then().catch(e => console.error(e)); 

Odpowiedz

1

unhandledRejection obsługi błędów nie może być dobrym sposobem, aby spróbować złapać wszystko. Chciałbym sugerujemy owijając swoje asynchronicznie/czeka w blokach try/catch:

async function doSomething() { 
    try { 
    await doSomethingElse() 
    } catch(err) { 
    console.log(err) 
    } 
} 

To powinno dać lepsze ślad stosu.

+0

To co to daje: \t ReferenceError: sdfg nie jest zdefiniowana \t na Fruit.module.exports [GET] (/models/fruit/get.js:29:2) \t na process._tickDomainCallback (internal/process/next_tick.js: 129: 7) –

+0

@JohnDerring, który wygląda jak ślad stosu, mówiąc, że sdfg nie jest zdefiniowany w linii 29 modelu owocowego. czego mi brakuje? –

+0

11 innych funkcji, które pojawiły się przed uzyskaniem tej funkcji? Innymi słowy, kompletny ślad stosu ...? –

Powiązane problemy