Я пытаюсь заставить свой метод post ждать завершения сценария python для файла, который только что загрузил пользователь.Я считаю, что проблема в том, что app.post не является асинхронным, но я не уверен, как сделать его асинхронным.
Я пробовал несколько модификаций следующего кода.
async function pythonScript(file, cb){
try{
var PythonShell = require('python-shell');
// Use python shell
var {PythonShell} = require('python-shell');
console.log("Filename = " + File1)
var options = {
mode: 'text',
args: [File1, File2, File3]
};
PythonShell.run('pythonFile.py', options, function (err, results) {
if (err) throw err;
console.log(results[results.length-1]);
result = results[results.length-1];
output = result;
console.log("output " + output);
});
return output;
catch(error){
console.log(error)
}
}
app.post('/upload', async(req, res), (req, res) => {
upload(req, res, (err) => {
if(err){
res.render('index', {
msg: err
});
} else {
if(req.file == undefined){
res.render('index', {
msg: 'Error: No File Selected!'
});
} else {
await pythonScript(file, cb).then(res.render('index', {
file: `uploads/${req.file.filename}`,
msg: 'File Uploaded! '+ output
}));
}
}
});
});
Метод pythonScript должен быть завершен до рендеринга страницы, в противном случае переменная 'output' будет пустой (вывод задается в методе pythonScript.