Rückrufe, die sich überall in JavaScript befinden, sind eine Katastrophe für die Prozesskontrolle, und ihre Nachteile sind offensichtlich:
1. Ohne explizite Rückkehr ist es einfach, unnötige Prozesse und Fehler zu erzeugen, die durch sie verursacht werden.
2. Der Code ist unendlich und schwer zu lesen verschachtelt.
Lassen Sie uns darüber sprechen, wie die oben genannten Probleme gelöst und vermeiden können.
Das erste Problem ist ein Gewohnheitsproblem. Bei der Verwendung von Callback vergessen die Leute oft, die Rückkehr zu verwenden. Diese Situation gilt insbesondere bei der Verwendung von Kaffee-Skript (obwohl sie die letzten Daten als Rückgabewert bei Zusammenstellung von JavaScript erfasst, gibt dieser Rückgabewert nicht unbedingt Ihre ursprüngliche Absicht dar). Schauen Sie sich das Beispiel unten an.
Die Codekopie lautet wie folgt:
a = (ähm, Rückruf)->
callback (), wenn err?
console.log 'du wirst mich sehen' '
B = ->
console.log 'Ich bin ein Rückruf'
a ('Fehler', b)
In diesem sogenannten Codestil "Fehler zuerst" möchten wir natürlich nicht, dass der nachfolgende Code in Methode A ausgeführt wird, wenn ein Fehler auftritt, aber wir möchten keinen Wurf verwenden, um den gesamten Prozess aufzuhängen (Sie müssen anmutig sterben ~), damit der obige Code Fehler verursacht.
Eine Lösung besteht darin, ehrlich zu schreiben, wenn ... sonst ..., aber ich bevorzuge Folgendes:
Die Codekopie lautet wie folgt:
a = (ähm, Rückruf)->
RECHTEN SIE CALLBACK () RECHTEN, WENN ERR?
console.log 'du wirst mich nicht sehen' '
B = ->
console.log 'Ich bin ein Rückruf'
a ('Fehler', b)
Die meisten Rückgabewerte in JavaScript -asynchronen Methoden sind nutzlos. Daher verwenden wir die Rücksendung als Prozesskontrollrolle mit weniger Code als wenn ... sonst ... aber klarer.
Das zweite Problem ist, dass es schwierig ist, auszurotten.
Ein guter Weg ist es, einige Prozesssteuerungsmodule zu verwenden, um den Code besser organisiert zu machen. Zum Beispiel ist Async ein gutes Modul, das eine Reihe von Schnittstellen, einschließlich Iteration, Schleifen und einigen bedingten Aussagen sowie sogar ein Warteschlangensystem, bereitstellt. Die folgenden Beispiele können verwendet werden, um die Vor- und Nachteile der beiden Möglichkeiten zum Schreiben von Namen zu beschreiben.
Die Codekopie lautet wie folgt:
#Normal
First = (Callback)->
console.log 'Ich bin die erste Funktion'
Rückruf ()
Sekunde = (Rückruf)->
console.log 'Ich bin die zweite Funktion'
Rückruf ()
dritter = ()->
console.log 'Ich bin die dritte Funktion'
zuerst ->
Zweite ->
dritte()
# Verwenden Sie Async
async = fordert ('async')
async.waterfall [
Erste,
zweite,
dritte
], (err)->
Welches würden Sie als weise Person wählen?