2016-04-05 5 views
1

Ich habe so etwas wie die folgendenIn NodeJS Wie beende ich eine übergeordnete Funktion von einer virtuellen Funktion

var async = require(async) 

function start() { 
    async.series(
     [ 
      function (callback) { 
       // do something 
       callback(null, "Done doing something") 
       return // EXIT start() NOT JUST THIS VIRTUAL FUNCTION 
      }, 
      function (callback) { 
       // do something else if the first thing succeeded 
       callback(null, "Done doing something else") 
      } 
     ], 
     function (err,result) { 
      if (err) { 
       console.log(err) 
      } 
     } 
    ) 

    console.log("All done!") 
} 

// Start doing stuff 
start() 

Ist es möglich, die Funktion start() basierend auf einer Bedingung aus der enthaltenen virtuellen Funktion zu verlassen, wo ich legte den Kommentar "EXIT start() nicht nur diese virtuelle Funktion"

+1

Haben Sie die Async-Dokumente gelesen? – Neal

+2

WTH ist eine "virtuelle Funktion"? Funktionen sind ziemlich konkrete Objekte in JS :-) – Bergi

+0

Es gibt keine virtuelle Funktion in Javascript –

Antwort

0

Kurz gesagt ja, können Sie die Aufgabe Serie vorzeitig beenden. async verwendet error-first callbacks, die eine grundlegende asynchrone Callback-Struktur in Node.js sind. Eine zusätzliche Ressource zum Erlernen der Async-Entwicklung mit Node.js finden Sie in diesem großartigen Artikel blog post von RisingStack.

Rückrufe von async werden zu einem letzten Rückruf zurückgeleitet, der aufgerufen wird, wenn der async.series abgeschlossen ist. Falls angegeben, ist dieser Rückruf optional. Wenn eine Task innerhalb der Serie den Rückruf mit einem anderen Wert als null im ersten Parameter zurückgibt, wird der Fehlerparameter series unterbrochen und zum letzten Callback-Handler zurückgeleitet.

async.series(
    [ 
     function (callback) { 

      // If some condition is met, exit series with an error 
      if (someCondition) 
       return callback('exit start', null); 

      return callback(null, 'Done doing something'); 
     }, 
     function (callback) { 
      if (someCondition) 
       return callback('error', null); 

      // do something else if the first thing succeeded 
      return callback(null, "Done doing something else") 
     } 
    ], 
    function (err,result) { 
     // Handle error returned from a series callback if one occurred  
     if (err) { 
      console.log(err) 
     } 
    } 
) 
+0

Danke, nicht sicher, wie ich das im Doc verpasst :( –

+0

Ist die frühe Pause eigentlich eine Fehlerbedingung, wenn nicht? Wenn nicht, werden Sie im Wesentlichen Ausnahmen/Fehler für die Ablaufsteuerung verwenden, was nicht gut ist Idee – dvlsg

+0

@dvlsg übergibt einen Wert an den Fehlerparameter des Rückrufs erzeugt keine Ausnahme, es enthält nur einen anderen Wert als "null", die an "async" signalisiert, aus der Serie zu brechen. Dies ist eine akzeptable Verwendung von Der Fehler param. Ein Fehler ist keine Ausnahme, eine Ausnahme kann nicht asynchron behandelt werden und würde einen "try/catch" erfordern, der synchron ist. – peteb

0

In async Dokument (hier: https://github.com/caolan/async#seriestasks-callback)

async.series Führen Sie die Funktionen in der Tasks-Sammlung nacheinander aus, wobei jede ausgeführt wird, sobald die vorherige Funktion abgeschlossen ist. If any functions in the series pass an error to its callback, no more functions are run und Callback wird sofort mit dem Wert des Fehlers aufgerufen. Andernfalls erhält der Rückruf eine Reihe von Ergebnissen, wenn Aufgaben abgeschlossen sind. So

, statt Aufruf:

return // EXIT start() NOT JUST THIS VIRTUAL FUNCTION 

Sie können einfach anrufen:

callback("stop", null) 
+0

Das funktioniert auch, aber ich kann nur eine Antwort akzeptieren. Danke, aber –