2017-10-10 2 views
0

Lors du débogage d'un rappel de promesse then dans Node.JS à l'aide de quelque chose comme Visual Studio Code, la pile d'appels semble presque redondante. Au lieu de fournir la fonction qui a appelé mon code d'un point de vue logique, elle fournit la fonction qui appelle mon code d'une perspective littérale; la bibliothèque Bluebird (ou peut-être la bibliothèque Q). Ce que je veux réellement voir, c'est la fonction de promesse précédente qui a été exécutée, ou "l'initiateur" de la chaîne de promesses. D'un point de vue logique, c'est le flux du programme qui m'intéresse. Est-ce que je peux obtenir cette information pendant le débogage?Comment obtenir des informations de débogage "initiateur" pour des promesses?

+0

Juste pour que vous réalisiez, ce que vous demandez n'est pas la pile d'appels réelle. Selon la spécification de la promesse, la pile d'appels est vide de tout votre code quand un gestionnaire '.then()' est appelé - c'est ce qui arrive avec les gestionnaires asynchrones. Cela dit, je comprends ce que vous aimeriez voir (une pile de flux asynchrone ou quelque chose comme ça), mais je ne suis au courant d'aucun outil qui pourrait fournir cela. La [bibliothèque de promesses Bluebird] (http://bluebirdjs.com/docs/api/promise.longstacktraces.html) permet de vous donner de longues traces de pile qui pourraient être pertinentes pour votre problème. – jfriend00

+0

Bonne idée. J'ai posté une réponse. – jfriend00

+0

Lors du débogage avec Google Chrome DevTools vous avez déjà la prise en charge d'une pile d'appels 'async'. Ce qu'il peut être sur le chemin est la présence de certaines bibliothèques (comme 'Bluebird') dans la pile, que vous pouvez ignorer en utilisant la [fonction blackbox] (https://developer.chrome.com/devtools/docs/blackboxing) . Dans VSCode, il existe une fonctionnalité similaire appelée ['skipFiles'] (https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_launch-configuration-attributes) que vous devez définir dans le fichier' launch.json'. – MarcoL

Répondre

2

Juste pour que vous réalisiez, ce que vous demandez n'est pas la pile d'appels réelle. Selon la spécification de promesse, la pile d'appels est vide de tout votre code lorsqu'un gestionnaire .then() est appelé - c'est ce qui se passe avec les gestionnaires asynchrones. Cela dit, je comprends ce que vous aimeriez voir (une pile de flux asynchrones ou quelque chose comme ça), mais je ne suis pas au courant de tout outil qui fournira cela. Le Bluebird promise library a un moyen de vous donner de longues traces de pile qui pourraient être pertinentes à votre problème