【发布时间】:2020-07-28 15:07:44
【问题描述】:
这是我当前发送空文件的解决方案。我基本上需要在文件从特定存储桶中删除之前通过电子邮件发送文件
exports.sendBeforeDelete = functions.storage.bucket('reports').object().onDelete(async (object:any) => {
const fileBucket = object.bucket;
if (fileBucket === 'reports') {
const filePath = object.name;
if (filePath) {
const file = await request(`${object.mediaLink}&token=${object.metadata.firebaseStorageDownloadTokens}`);
const email = example@example.com
const mailOptions = {
from: 'example',
to: email,
subject: 'Report Deleted',
text: ` Mail Body
`,
attachments: [{
file
}
]
};
transporter.sendMail(mailOptions, function (error: any, info: any) {
if (error) {
console.log('error', error);
} else {
console.log('Email sent: ' + info.response);
}
});
}
}
return Promise.resolve()
});
我曾尝试仅使用该对象,但似乎从未获得有效文件。
【问题讨论】:
-
您没有正确处理承诺和异步编程。您有义务返回一个仅在所有异步工作完成后才解决的承诺。您不能只返回
Promise.resolve()自动执行此操作。 -
你能解释一下为什么这会影响手头文件的检索吗?
-
函数在任何工作完成之前终止和清理。
标签: javascript firebase google-cloud-functions google-cloud-storage