2015-07-14 24 views
6

Làm thế nào tôi có thể bọc một chức năng có thể có chức năng đồng bộ/đồng bộ hóa bên trong với lời hứa?Bọc trong lời hứa chức năng chung của JavaScript

Tôi đã gọi hàm như sau

action[fn](req, res); 

chức năng fn (trong ví dụ dưới đây) được điều hành có thể có bên trong (tôi sử dụng cuộc gọi động cho mỗi chức năng) sync hay một động đồng bộ hóa như bên dưới ví dụ:

  1. Cách đề xuất kết hợp lời hứa.
  2. Làm thế nào để xử lý các lỗi nếu có ...

tôi sử dụng ứng dụng 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

Vấn đề thực tế là gì? Tại sao bạn nghĩ Promises có thể giúp bạn? – thefourtheye

Trả lời

1

ví dụ chúng ta có thể sử dụng thư viện và Q hoãn, một cái gì đó như thế này:

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 
     }) 
    } 

Trong lời hứa mã này sẽ giải quyết sau khi req kết thúc sự kiện, và sau đó res.end, nhưng tôi khuyên bạn nên tạo một phương pháp khác để phản hồi kết thúc và làm việc với lời hứa từ chạy phương thức. Chúc may mắn!

+0

Cảm ơn nhưng làm thế nào tôi nên xử lý lỗi trong phương pháp gọi? –

+0

bạn có thể sử dụng catch – siavolt

+0

điều này sẽ làm việc trong async (try-catch)? –

Các vấn đề liên quan