NodeJS代码不等待功能完成

时间:2018-11-16 00:58:53

标签: node.js asynchronous

我正在创建带有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写入磁盘后?

2 个答案:

答案 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块中的回调中。