嗨我在运行这个异步函数时遇到错误,这个异步函数会调用ruby文件!我应该设置代码以便异步函数等待exec和base64.encode的终止,我该怎么办?
async function GenerazioneRapportino() {
var encode="false";
console.log("Model: sono dentor model");
//Cambio direttorio
process.chdir('./Model');
// console.log("directory:",process.cwd());
exec('ruby report.rb prova prova2 prova3', function (err, stdout, stderr) {
if(stderr) {
console.log("Errore generazione rapportino: ",err);
return encode;
} else {
console.log("File Generator Correttamente: ",stdout);
base64.encode('rapportino.pdf', function(err, base64String) {
encode=base64String;
process.chdir('../');
console.log("Process dir ",process.cwd());
return encode;
});
}
});
console.log("Model: Ritorno encode");
return encode;
}
答案 0 :(得分:0)
如果你想使用async
函数,你应该将你的回调转换为Promise,并将await
转换为Promise以获得所需的值。请注意,无需重新分配(或使用)外部encode
变量:
async function GenerazioneRapportino() {
console.log("Model: sono dentor model");
process.chdir('./Model');
const result = await new Promise((resolve, reject) => {
exec('ruby report.rb prova prova2 prova3', function(err, stdout, stderr) {
if (stderr) {
console.log("Errore generazione rapportino: ", err);
reject(false);
} else {
console.log("File Generator Correttamente: ", stdout);
base64.encode('rapportino.pdf', function(err, base64String) {
process.chdir('../');
console.log("Process dir ", process.cwd());
resolve(base64String);
});
}
});
});
console.log("Model: Ritorno encode");
return result;
}
请注意,如果承诺被拒绝,在await
函数中使用async
将导致错误抛出 - 确保GenerazioneRapportino
的使用者在try
中调用该函数阻止。