如何在调用next函数之前确保我的异步函数先执行

时间:2018-01-08 18:57:57

标签: javascript node.js async.js

我的程序应该将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");
		}
	});
}




我已尽可能多地阅读有关异步通话的内容,我觉得我对他们所使用的内容有一个很好的理解,但我试图解决我的问题。具体问题。

2 个答案:

答案 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