我正在尝试执行以下功能。
我正在执行下面的代码,但是当我收到电子邮件时,该文件具有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 :(得分:0)
要序列化操作,您需要在轮到他们之前不要调用它们。您对writeFile
,sendMail
和removeFile
的分配是立即调用所有功能,这绝对不是您想要的。
假设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()
不是同步的,那么你需要一个回调或它的承诺,这样你就能知道它什么时候完成,所以它会异步链接。