如何确保我的异步函数在调用下一个函数之前首先执行
How to ensure my async function executes first before calling next function
我的程序应该将 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");
}
});
}
我已尝试尽可能多地阅读有关异步调用的内容,我觉得我对它们的用途有很好的理解,但我在尝试解决我的具体问题时一无所获。
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);
}
我的程序应该将 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");
}
});
}
我已尝试尽可能多地阅读有关异步调用的内容,我觉得我对它们的用途有很好的理解,但我在尝试解决我的具体问题时一无所获。
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);
}