Essayer de comprendre les générateurs / yield dans node.js - qu'est-ce qui exécute la fonction asynchrone?

Node.js a maintenant générateurs.

Ma compréhension est que les générateurs peuvent être utilisés pour écrire du code qui semble être beaucoup plus linéaire et évite de rappel de l'enfer et de la pyramide de doom style de codage.

De sorte à ce point, ma compréhension est que l'intérieur d'un générateur de code s'exécute jusqu'à ce qu'il atteigne un "rendement" de la déclaration. L'exécution de la fonction de générateur suspend à ce point. Le yield déclaration spécifie une valeur de retour qui peut être une fonction. Habituellement, ce serait un blocage de la fonction d'e/S qui aurait normalement besoin d'être exécutée de manière asynchrone.

Le rendement de retour de la fonction est retourné à ce que appelé le générateur.

Ma question est de savoir ce qui se passe à ce point? Qu'est-ce exactement exécute le blocage de la fonction d'e/S que le rendement de retour?

Est-il exact que pour écrire générateur/rendement de code qui semble être linéaire, il doit y avoir un tri spécifique de la fonction qui appelle le générateur, une fonction qui parcourt le générateur et exécute chaque asynch fonction renvoyée par le rendement et renvoie le résultat de la asynch fonction de retour dans le générateur?

Il n'est toujours pas clair pour moi exactement comment le asynch fonction renvoyée par le rendement est exécuté. Si elle est exécutée par la fonction qui appelle le générateur, est-il exécuté de manière asynchrone? Je suppose donc raison de faire autrement entraînerait le blocage de comportement.

Pour résumer mes questions:

  1. À écrire "linéaire" asynch code avec des générateurs, est-il nécessaire pour qu'il y ait un appel de fonction qui effectue une itération sur le générateur, l'exécution a abouti à des fonctions de rappels et de retourner le résultat de la fonction de rappel de retour dans le générateur?
  2. Si la réponse à la question 1 est oui, exactement comment les a abouti à des fonctions exécutés de manière asynchrone?

Quelqu'un peut-il offrir une meilleure vue d'ensemble/résumé de la façon dont l'ensemble du processus fonctionne?

source d'informationauteur Duke Dougal