NodeJS 代码不等待函数完成

Ale*_*lex 0 asynchronous node.js

我正在创建一个带有 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");
Run Code Online (Sandbox Code Playgroud)

该代码有时有效。问题是下面的代码没有等到写好excel并且电子邮件找不到附件。

如何让我的 Lambda 函数等到 excel 写入磁盘?

jfr*_*d00 5

await仅适用于返回在底层异步操作完成时解析的承诺的函数。由于您将完成样式的回调传递给函数,因此它可能不会返回这样的承诺。

如果你使用的库不直接支持promise,那么你可以自己promisify这个函数。

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);
    }
}
Run Code Online (Sandbox Code Playgroud)