带有 exec ruby 的异步函数
Asynchronous function with exec ruby
嗨我在运行这个异步函数上有一个错误,这个异步函数调用了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;
}
如果您想使用 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;
}
请注意,如果承诺被拒绝,在 async
函数中使用 await
将导致抛出错误 - 确保 GenerazioneRapportino
的消费者调用 [=] 中的函数17=]块。
嗨我在运行这个异步函数上有一个错误,这个异步函数调用了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;
}
如果您想使用 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;
}
请注意,如果承诺被拒绝,在 async
函数中使用 await
将导致抛出错误 - 确保 GenerazioneRapportino
的消费者调用 [=] 中的函数17=]块。