使用await和async处理promise



我正在使用这个库进行文件上传。这里写着

sampleFile.mv('/somewhere/on/your/server/filename.jpg', function(err) {
if (err)
return res.status(500).send(err);
res.send('File uploaded!');
});

但我想使用等待和异步,所以当我尝试时

router.put("/upload", async(req,res)=>{
const isUploaded = await sampleFile.mv('/somewhere/on/your/server/filename.jpg');
console.log(isUploaded) // it gives me undefined over here.
});

我已经完成了您正在使用的库的.mv((的代码它确实得到了承诺的支持

然而,它似乎用空参数resolves((

所以,如果你想使用异步等待,你可以使用,

router.put("/upload", async(req,res)=>{
try{
await sampleFile.mv('/somewhere/on/your/server/filename.jpg');
res.send('File uploaded!');
} catch(err){
res.status(500).send(err);
});

您不能使用

const isUploaded = await mvPromise('/somewhere/on/your/server/filename.jpg');

它将始终是未定义的,因为它不返回任何内容。

当没有提供回调时,库支持promise,因此您应该能够等待

资源:https://github.com/richardgirges/express-fileupload/blob/1216f4f0685caca7f1ece47f52c6119dc956b07d/lib/fileFactory.js#L62

要访问在中间件中创建的正确文件,您需要查看请求。此外,函数CCD_ 1的响应不应该返回任何内容。只要它不扔,那么你就可以走了。

app.post("/upload", async (req, res) => {
if (!req.files || Object.keys(req.files).length === 0) {
return res.status(400).send("No files were uploaded.");
}
// The name of the input field (i.e. "sampleFile") is used to retrieve the uploaded file
let { sampleFile } = req.files;
// Use the mv() method to place the file somewhere on your server
try {
await sampleFile.mv("/somewhere/on/your/server/filename.jpg");
res.send("File uploaded!");
} catch (e) {
res.sendStatus(500);
}
});

最新更新