蓝鸟执行系列的承诺数组

时间:2015-10-08 15:24:33

标签: javascript node.js promise bluebird

我正在尝试执行以下功能。

  1. 写文件
  2. 发送附有文件的电子邮件
  3. 删除文件
  4. 我正在执行下面的代码,但是当我收到电子邮件时,该文件具有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
    })
    

1 个答案:

答案 0 :(得分:0)

要序列化操作,您需要在轮到他们之前不要调用它们。您对writeFilesendMailremoveFile的分配是立即调用所有功能,这绝对不是您想要的。

假设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()不是同步的,那么你需要一个回调或它的承诺,这样你就能知道它什么时候完成,所以它会异步链接。