Maison  >  Article  >  interface Web  >  Introduction à l'utilisation du flux de contrôle de rappel dans les compétences JavaScript_javascript

Introduction à l'utilisation du flux de contrôle de rappel dans les compétences JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:08:581439parcourir

Les rappels que l'on voit partout en JavaScript sont un désastre pour le contrôle des processus, et les défauts sont évidents :

1. Sans retour explicite, il est facile de produire des processus redondants et les bugs qui en résultent.
2. Le code est infiniment imbriqué et difficile à lire.

Parlons de la façon de résoudre et d’éviter les problèmes ci-dessus.

Le premier problème est une question d'habitude. Lors de l'utilisation du callback, les gens oublient souvent d'utiliser return Cela est particulièrement vrai lors de l'utilisation de coffee-script (bien qu'il collecte lui-même le résultat final une fois compilé en javascript). est utilisée comme valeur de retour, mais cette valeur de retour ne représente pas nécessairement votre intention initiale). Jetez un œil à l’exemple ci-dessous.

Copier le code Le code est le suivant :

a = (erreur, rappel)->
callback() si erreur ?
console.log 'tu me verras'

b = ->
console.log 'Je suis un rappel'

a('erreur', b)

Dans ce style de codage dit « d'erreur d'abord », nous ne voulons évidemment pas que le code suivant dans la méthode a soit toujours exécuté lorsqu'une erreur se produit, mais nous ne voulons pas utiliser throw pour rendre l'ensemble du processus hang (ça doit être gracieux même si cela arrive) Bon sang ~), alors le code ci-dessus générera des bugs.

Une solution est d'écrire if...else... honnêtement, mais je préfère l'approche suivante :

Copier le code Le code est le suivant :

a = (erreur, rappel)->
return callback() si erreur ?
console.log 'tu ne me verras pas'

b = ->
console.log 'Je suis un rappel'

a('erreur', b)

La plupart des valeurs de retour​​dans les méthodes asynchrones JavaScript sont inutiles, donc return est utilisé ici pour agir comme un contrôle de processus, ce qui est moins de code que if...else..., mais plus clair.

Le deuxième problème se pose dans le ventre de la mère et est difficile à éradiquer.

Un bon moyen consiste à utiliser certains modules de contrôle de flux pour rendre le code plus organisé. Par exemple, async est un bon module qui fournit une série d'interfaces, notamment l'itération, le bouclage et certaines instructions conditionnelles, et inclut même une mise en file d'attente. système. Les exemples suivants peuvent illustrer les avantages et les inconvénients des deux méthodes d'écriture

Copier le code Le code est le suivant :

#normal

premier = (rappel)->
console.log 'Je suis la première fonction'
rappel()

seconde = (rappel)->
console.log 'Je suis la deuxième fonction'
rappel()

troisième = ()->
console.log 'Je suis la troisième fonction'

premier -> deuxième ->
troisième()

#utiliser async

async = require('async')

async.waterfall [

d'abord,
deuxièmement,
troisième
], (err)->

En tant que sage, lequel choisirez-vous ?

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn