2015-07-14 17 views
6

Wie kann ich eine Funktion, die Sync/A-Sync-Funktionalität mit Versprechen haben kann umwickeln?Wrap in Versprechen JavaScript generische Funktion

Ich habe Aufruf der Funktion wie folgt

action[fn](req, res); 

in Funktion fn (in folgendem Beispiel) ausgeführt wird, kann im Inneren haben (ich verwende dynamischen Aufruf für jede Funktion) sync oder a-sync wie Beispiel unten

  1. Wie seine empfohlen, sie in Versprechen zu wickeln.
  2. Wie Fehler behandeln, wenn ein ...

I NodeJS Anwendung

run: function (req, res, filePath) { 
     var writeStream = fs.createWriteStream(fileRelPath, {flags: 'w'}); 
     req.pipe(writeStream); 
     req.on("end", function() { 
      console.log("Finish to update data file") 
     }); 
     res.end("File " + filePath + " saved successfully"); 
    } 
+0

Was ist das eigentliche Problem? Warum glaubst du, dass Promises dir helfen kann? – thefourtheye

Antwort

1

wir zum Beispiel Q libary verwenden können und verschieben, so etwas wie:

run: function (req, res, filePath) { 
     var d = Q.defer(); 

     var writeStream = fs.createWriteStream(fileRelPath, {flags: 'w'}); 
     req.pipe(writeStream); 
     req.on("end", function() { 
      console.log("Finish to update data file"); 
      d.resolve(); 
     }); 

     req.on("error", function (err) { 
      d.reject(err); 
     }); 



     return d.promise.then(function(){ 
      res.end("File " + filePath + " saved successfully"); 
     }).catch(function(err){ 
      //handle error 
     }) 
    } 

In diesem Code wird Versprechen nach req Ende Ereignis und dann res.end auflösen, aber ich empfehle, eine andere Methode für die Antwort zu erstellen und zu beenden Arbeiten mit Versprechen aus dem Methodenlauf. Viel Glück!

+0

Danke, aber wie soll ich mit Fehlern in der Aufrufmethode umgehen? –

+0

können Sie fangen – siavolt

+0

dies funktioniert in async (der Versuch-Catch)? –