我正在创建带有Lambda函数的Excel文件,该文件随后会通过电子邮件发送。 Excel之前会先填充数据,然后按以下方式存储(使用excel4node nom程序包):
console.log("Before print");
var test2 = await workbook.write(path, function(err, stats) {
console.log("Excel written");
if (err) {
console.error(err);
} else {
console.log(stats); // Prints out an instance of a node.js fs.Stats object
}
});
console.log("After print");
该代码有时有效。问题在于以下代码在编写excel且电子邮件无法找到附件之前没有等待。
如何让Lambda函数等到excel写入磁盘后?
答案 0 :(得分:3)
await
仅与返回承诺的函数一起使用,该承诺将在基础异步操作完成时解决。由于您要向函数传递完成样式的回调,因此它可能不会返回这样的承诺。
如果您使用的库不直接支持promise,那么您可以自己实现该功能。
const util = require('util');
workbook.writeP = util.promisify(workbook.write);
async function someFunc() {
try {
let result = await workbook.writeP(path);
console.log(result);
// do something here that runs after the .write operation is done
} catch(e) {
console.log(e);
}
}
答案 1 :(得分:0)
我建议将电子邮件代码放在else块中的回调中。