我想从客户端接收图像,将其转换为文本,然后在转换后删除图像。我使用下面的代码:
app.post('/upload', (req,res)=>{
const myFile = req.files.file;
myFile.mv(`D:/web_projects/react-express-mongodb-template/server/pictures/${myFile.name}`)
let img = `D:/web_projects/react-express-mongodb-template/server/pictures/${myFile.name}`
convert(img);
remove(img)
})
app.listen(5000, () => {
console.log('server is running at port 5000');
})
async function convert(img){
const worker = createWorker();
console.log(worker)
await worker.load();
await worker.loadLanguage('eng');
await worker.initialize('eng');
const { data: { text } } = await worker.recognize(img);
console.log(text);
await worker.terminate();
}
async function remove(path){
try {
fs.unlink(path)
} catch(err) {
console.error(err)
}
}
所以在post方法中,我调用convert函数,然后remove,但是remove先被执行,所以convert函数导致错误。有办法处理这个问题吗?
由于convert
是async
函数,因此返回一个promise,替换为:
convert(img);
remove(img)
:
convert(img).then(() => remove(img));
然而,这假设convert
中所有等待的worker
方法调用都返回承诺。如果不是这种情况,并且它们运行异步代码,那么实际上convert
将不能正确地等待这些,您应该首先承诺它们。