如何确保我的异步函数在调用下一个函数之前首先执行

How to ensure my async function executes first before calling next function

我的程序应该将 SQL 查询的结果解析为 CSV 文件,然后保存到 FTP 和 S3 存储桶。 connectSQL 是一个异步函数,需要在调用 writeToCSV 函数之前完全执行,但到目前为止,无论我尝试了什么,writeToCSVconnectSQL 之前执行,给我一个空的 CSV 文件。我怎样才能确保 connectSQL 在其他任何事情之前执行?

function dataRefresh(){
 var resu = connectSQL();
 writeToCSV(resu);
}

async function connectSQL(){
 try {
  const sqlConfig = {
           // db connection config
  };
  
  const sqlQuery = "SELECT * FROM " + table;
  
    let pool = await sql.connect(sqlConfig);
    let result = await pool.request().query(sqlQuery);
    return result;
 } catch(err){
  throw err;
 }
}

function writeToCSV(event){
 // Parse to CSV
 var csv = parser({data: event.Records, fields: fields});
 // Write CSV to local directory
 fs.writeFile(fileName, csv, function(err){
  if (err){
   throw err;
  } else{
   console.log("Data saved locally");
  }
 });
}

我已尝试尽可能多地阅读有关异步调用的内容,我觉得我对它们的用途有很好的理解,但我在尝试解决我的具体问题时一无所获。

Async functions return a Promise 解析为函数的 return 值。您可以将其视为承诺并使用 .then(),或者也将 dataRefresh 异步并使用 await:

function dataRefresh(){
    connectSQL().then(result => writeToCSV(result));
    // or simply:
    // connectSQL().then(writeToCSV);
}

async function dataRefresh(){
    var result = await connectSQL();
    writeToCSV(result);
}

假设你的代码是运行在异步函数工作的环境中,那么我认为你需要做的就是在调用connectSQL之前添加await里面dataRefresh 像这样:

async function dataRefresh(){
    var resu = await connectSQL();
    writeToCSV(resu);
}