0
votes

ASYNC Await et promesses - Comment améliorer la syntaxe

Comment créer un sucre syntaxiste pour masquer une partie de la complexité qui est .Ce?

donné le code ci-dessous: p> xxx pré>

généralement accessible via le verbat: xxx pré>

peut être créé de sucre pour être créé à la place: p> xxx pré>

ou en outre, au lieu de: p>

let x = myObject.myPromise.res
... so stuff with x


1 commentaires

Maintenant je veux un gâteau! Merci beaucoup! Je suis sur un régime ici ... :(


3 Réponses :


0
votes

Il y a une syntaxe appelée essayer () () En combinaison avec async attendre

exemple: xxx

au lieu d'utiliser prometteur et chaîne a () avec un rappel à celui-ci.

Vous faites ASYNCCALL () et sous lequel vous pouvez continuer à écrire plus de code avec la valeur résolue Au lieu de enchaîner plus de fonctions avec des rappels

c'est difficile à expliquer et à comprendre sur 1 pied alors voici quelques Ressource pour Async Await


1 commentaires

Comment est-ce applicable à MyFrridge.Opendoor (). Alors ?



2
votes

Vous pouvez utiliser attendre précédent myfrridge.opendoor () appelé entre parenthèses pour former une expression puis la chaîne .AtCake () à appeler Le procédé de l'objet renvoyé de .Opendoor () xxx


18 commentaires

Merci pour la réponse que j'avais pensé à cela, mais c'est toujours une demi-solution, cela entraînerait des expressions toujours difficiles à lire / créer des expressions: (attendre (attendre Myfrridge.Opendoor ()). Eatcake ()). GetFat () . Mais mieux que cependant.


@TrevtheDev Non, le code n'est pas une "Half Solution" . La réponse atteint l'exigence décrite à la question.


Comment est (attendre (attendre Myfrridge.Opendoor ()). Eatcake ()). GetFat () === MyFridge.Opendoor (). Eatcake (). GetFat ()?


@TrevtheDev Ce que vous décrivez hypothétiquement à la question et au commentaire précédent n'est actuellement pas possible en utilisant JavaScript dans la pratique. Le code à la réponse utilise des expressions pour atteindre essentiellement le même modèle identique ou similaire en utilisant des parenthèses (une expression) pour chaque attendre utilisation nécessaire pour chaîner une méthode.


OK, si ce n'est vraiment pas possible, la réponse correcte n'est pas possible - bien que je doute que ce ne soit pas possible - plus probablement fort. En substance, la solution proposée est ma question avec un format différent.


@TrevtheDev Il n'est pas possible avant de montrer et de prouver le contraire. Si en fait, le motif est possible mais "plus probablement juste durement" alors un tel motif serait contraire à l'objectif indiqué du code en premier lieu. Le motif utilisé à la réponse utilise uniquement des parenthèses (deux octets supplémentaires par attendre utilisation) pour atteindre le résultat attendu


Une solution pourrait être d'écrire un mini transpilateur qui traduit ledit code à .then (si clairement pas impossible).


@TrevtheDev afin que votre solution consiste à écrire plus code à "écrire un mini transpilateur" que deux octets supplémentaires par attendre utilisation de l'opérateur, où le L'exigence est d'écrire moins code? Encore une fois, jusqu'à ce que vous montriez et prouver que cela ne soit pas possible.


C'est une meilleure solution que celle proposée - car elle rend l'interface exposée par le consommateur beaucoup plus propre et plus simple.


@Trevthediv puis écrivez ensuite le code et affichera et prouvez Stackoverflow.com/help/Self-answer . Bien que cela soit toujours contraire à l'exigence indiquée de la question à écrire moins code pour atteindre le résultat attendu, vous pouvez prouver votre hypothèse néanmoins.


Suggérez-vous mafrridge.Opendoor (). Eatcake () ne peut pas être transpilé à Myfrridge.Opendoor (). Ensuite (myCake => {mycake.eatcake ()})?


@TrevtheDev ne suit pas. L'exigence est de ne pas utiliser .Chen () et d'utiliser le moins de code possible possible, correct? Oui, vous pouvez créer une méthode qui renvoie un nouvelle promesse et utilise .Chen () dans la méthode promesse en chaînée , bien que c'est une abstraction qui utilise encore plus de code (plus d'octets que la solution à la présente réponse).


L'objectif est de créer du sucre syntaxique qui résoudra la complexité de l'attente et .Chen - la solution nécessitera plus de code, mais l'interface sera meilleure.


@TrevtheDev "mieux" est entièrement subjectif. C'est la question réelle: "Comment créer un sucre syntaxiste pour cacher une partie de la complexité qui est?" et "peut être créé de sucre pour être créé à la place: MyFridge. OPENDOOR (). EATCAKE () " Lequel le code de la réponse atteint une expression. Si la question signifie autre chose que la langue et le code utilisés à la question actuelle, veuillez mettre à jour la question de décrire avec précision quelle est l'exigence.


La question incluse: un peu de sucre peut-elle être créée à Myfridge.Opendoor (). Eatcake () que cette solution n'atteigne pas.


@TrevtheDev Avez-vous lu le lien au commentaire précédent? Ce modèle est déjà possible, bien que nécessaire pour définir des méthodes supplémentaires et plus de code. Si l'objectif est d'utiliser moins de code, vous pouvez utiliser le motif à la réponse. Ou encore, postez une réponse à votre propre question.


Merci @ Guest271314, votre idée du prototypage m'a conduit sur un trou de lapin qui m'a amené à proxy et après de nombreuses douleurs, la solution postée!


@TrevtheDev au moins que vous avez parcouru la clôture anti-lapin pour essayer de rentrer chez vous et découvert pour vous-même.



0
votes

Voici une solution qui fournit du sucre syntaxique qui peut être utilisé pour masquer les complexités d'attendre et ..Ce> xxx

est accessible via: xxx < / pré>


10 commentaires

"Voici une solution qui évite d'attendre et d'attendre:" sauf le motif n'évite pas .Chen () cible.then (valeur => {résolve ( valeur [access] (... x))})


@ Guest271314 fait à partir d'une perspective d'interface: elle permet d'exposer une API à des utilisateurs en aval qui ne sont pas jonchés avec .Chen et attendre. Les utilisateurs doivent seulement taper un réfrigérateur.Opendoor (). Eatcake ('Yummy'). GetFat () - .Chen et attendre non requis.


Le texte au début de la réponse décrit le motif n'est pas vrai et correct. Le code n'évite en fait pas d'utiliser .Chen () .


@ Guest271314 Mis à jour pour mieux refléter votre commentaire.


Si c'est votre perspective, alors soyez-le. Il n'y a rien de caché. Le code est une abstraction qui utilise toujours .Chen () .


@ Guest271314 Il est beaucoup préférable de fournir une API comme indiqué aux utilisateurs, vs. les nécessitant de comprendre quels appels sont asynchronisés et les gérer avec attendre et ..Ce. En fait, cela devrait probablement être le traitement par défaut des promesses en JavaScript, car elle est intuitive.


Cela prend peut-être votre propre interprétation du modèle à la réponse trop loin. Encore une fois, le code n'est qu'une abstraction. Lorsque des changements doivent être effectués ou une erreur ou un bug survient, l'ensemble du code devra être évalué, en supprimant le voile de l'abstraction.


@ Guest271314 Si l'on fait un appel ASYNC .Chen n'est utile que si le reste de son code est écrit de manière asynchraement avec Promises et .. / i > partout. Dans ma solution, le . devient analogue à Await qui est construit comme faisant le code ASYNC plus clair et plus facile à lire. Il n'empêche pas la complexité susmentionnée, mais fournit une solution plus simple en option par défaut. Tout en apportez le code plus simple, l'inconvénient est que ce code devient synchrone par défaut, ce qui peut ne pas être correct. C'est la même chose qui se passe avec attendre - qui arrête également l'exécution avant de procéder.


Si vous vous êtes convaincu que l'abstraction répond à l'exigence de la question, alors soyez-le. Cela ne signifie pas que vous pouvez convaincre tout le monde que ce que vous envisagez de «complexité», est en quelque sorte caché. "complexité" est subjectif. Le code n'est pas caché. Le code de la réponse pourrait être considéré comme ayant plus de "complexité" que de simplement utiliser .then () et attendre une fois qu'un individu débit de l'abstraction (lit le code source). En tout état de cause, c'est votre question et vous avez répondu à votre propre question, évidemment à votre propre satisfaction, ce qui compte parce que c'est votre question.


@ Guest271314 Lol, j'espérais vous convaincre de la brillance de mon argument - Oh bien, je vais devoir être satisfait de ma croyance autonome infaillible;). Merci encore pour votre défi, cela a permis de trouver cette solution.