2015-10-08 138 views
0

我正在嘗試執行以下功能。
藍鳥執行系列承諾數組

  1. 寫文件
  2. 發送電子郵件附帶
  3. 刪除文件

我做下面的代碼,但是當我收到的電子郵件,該文件具有ENOENT文件內容。
當我刪除變量removeFile時,我收到包含我請求的所有內容的電子郵件。
我也試過Promise.reduce,但也沒有運氣。
我在做什麼錯了?

var writeFile = fs.writeFileAsync(filePath, csv) 
var sendMail = sendEmail(to, from, msg, subject, fileName, filePath) 
var removeFile = fs.unlinkAsync(filePath) 
    return Promise.each([writeFile, sendMail, removeFile], function(fn){ 
    return fn 
}) 
+0

您在創建承諾時開始採取行動,而不是在您對其調用'Promise.each'時開始行動。 – Bergi

回答

0

要序列化操作,您需要在它們輪到它們之前不要調用它們。你的分配到writeFile,sendMailremoveFile立即調用它們的所有功能,這絕對不是你想要的。

假設sendMail()是同步的,那麼你就需要鏈你的承諾:

fs.writeFileAsync(filePath, csv).then(sendMail).then(function() { 
    return fs.unlinkAsync(filePath); 
}).then(function() { 
    // everything done successfully here 
}, function(err) { 
    // some sort of error here 
}); 

如果sendMail()是不同步的,那麼你需要一個回調或從一個承諾,所以你可以當它這樣做,它會告訴鏈異步。