Quelle est l'intention derrière la clause 2.2.4 de Promise / A + spec?

L'article 2.2.4 de la promesse / a + spec dit:

OnFulfilled ou onRejected ne doit pas être appelé jusqu'à ce que la pile de contexte d'exécution contienne uniquement un code de plate-forme.

Ensuite, dans les notes, il indique que:

Ici, "code de la plate-forme" signifie moteur, environnement et code de mise en œuvre prometteur. Dans la pratique, cette exigence garantit que onFulfilled et onRejected s'exécutent de manière asynchrone, après la boucle d'événement dans laquelle on appelle alors et avec une nouvelle pile.

Est-ce l'intention de faire en sorte que lorsqu'il y a une grande quantité de fonctions remplies dans une chaîne, l'exécution de celles-ci ne cause pas le blocage du fil?

Ou est-ce qu'il y a autre chose entre les lignes que je ne lis pas?

Le raisonnement est que lorsque les rappels sont toujours asynchrones au lieu d' être éventuellement asynchrone, ils offrent un outil d'utilisation plus cohérent et plus fiable. Considérez le code suivant

var pizza; browseStackOverflow().then(function(){ eatPizza(pizza); }); pizza = yesterdaysLeftovers; 

Maintenant, cet extrait suppose clairement que le service onFulfilled ne sera pas appelé tout de suite et si ce n'était pas le cas, nous aurions bientôt une pizza inutilisée et nous aurions faim. Bien que dans ce cas, le bug soit assez facile à réparer, l'ordre d'exécution est plus facile à suivre et, par conséquent, l'api est plus facile à utiliser lorsque vous pouvez faire des hypothèses comme celle-ci.

Il y a un problème fermé sur le paiement de Promises / A + GitHub avec discussion à ce sujet.