【发布时间】:2018-01-09 03:16:07
【问题描述】:
我的程序应该将 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");
}
});
}
我已尝试尽可能多地阅读有关异步调用的信息,并且我觉得我对它们的用途有很好的了解,但我试图解决我的具体问题却一无所获。
【问题讨论】:
-
您显示的代码甚至不应该工作。
connectSQL返回一个 Promise,而 Promise 没有Records属性。您只是在某处缺少await(这也可以解决您原来的问题)。
标签: javascript node.js async.js