2015-07-14 13 views
6

Come è possibile eseguire il wrapping di una funzione che può avere all'interno la funzionalità di sincronizzazione/sincronizzazione con promessa?Wrap in promise Funzione generica JavaScript

ho chiamata alla funzione come seguire

action[fn](req, res); 

nella funzione fn (nel seguente esempio) è gestito può avere all'interno (io uso richiamo dinamico per ogni funzione) di sincronizzazione o a-sync come sotto esempio,

  1. Come la sua consiglia di avvolgerlo nella promessa.
  2. come gestire gli errori eventuali ...

Io uso dell'applicazione nodeJS

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

Qual è il problema attuale? Perché pensi che Promises ti possa aiutare? – thefourtheye

risposta

1

per esempio possiamo usare Q libary e rinviare, qualcosa di simile:

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 questo codice la promessa si risolverà dopo l'evento req end, e quindi res.end, ma consiglio di creare un altro metodo per la risposta finale e lavorare con la promessa dal metodo eseguito. In bocca al lupo!

+0

Grazie, ma come dovrei gestire gli errori nel metodo invoke? –

+0

è possibile utilizzare la cattura – siavolt

+0

questo funzionerà in asincrono (il try-catch)? –