我的程序应该将SQL查询的结果解析为CSV文件,然后保存到FTP和S3存储桶。 connectSQL
是一个异步函数,需要在调用writeToCSV
函数之前完全执行,但到目前为止,无论我尝试过什么,writeToCSV
在connectSQL
之前执行,给我一个空的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");
}
});
}

我已尽可能多地阅读有关异步通话的内容,我觉得我对他们所使用的内容有一个很好的理解,但我试图解决我的问题。具体问题。
答案 0 :(得分:4)
Async functions返回Promise
解析函数的返回值。您可以将其视为承诺并使用.then()
,也可以转为dataRefresh
异步并使用await
:
function dataRefresh(){
connectSQL().then(result => writeToCSV(result));
// or simply:
// connectSQL().then(writeToCSV);
}
或
async function dataRefresh(){
var result = await connectSQL();
writeToCSV(result);
}
答案 1 :(得分:1)
假设您的代码在异步函数工作的环境中运行,那么我认为您需要做的就是在await
connectSQL
内的dataRefresh
调用之前添加async function dataRefresh(){
var resu = await connectSQL();
writeToCSV(resu);
}
这样:
p