我尝试了几种不同的方法,基本上我想从我的路由中取出cloudinary上传代码,并将其放在一个函数中,以使代码更加清晰。但是由于某些原因,我无法让async/await工作/等待上传完成后再继续执行。
以下是我的路由示例:
var fieldsUpload = upload.fields([{ name: 'image1', maxCount: 1 }, { name: 'image2', maxCount: 1 }])
router.post('/upload', fieldsUpload, async function (req, res, next) {
var url1 = await uploadToCloudinary(req.files['image1'][0].path);
console.log("Cloudinary url: " + url1);
var url2 = await uploadToCloudinary(req.files['image2'][0].path);
console.log("Cloudinary url: " + url2);
res.send("Succesfull Upload");
});
这是我的函数:
async function uploadToCloudinary(image) {
try{
let url = await cloudinary.v2.uploader.upload(image);
}
catch(err){ console.log(err)}
}
// function uploadToCloudinary(image) {
// cloudinary.v2.uploader.upload(image, function(error, result) {
// if(error) {
// console.log(error);
// }
// else {
// console.log("Succesfully uploaded image to cloudinary!")
// return result.secure_url;
// }
// });
// }
我将之前注释掉的函数放在这里,以便您可以看到我尝试将该函数保持为非异步状态,并在回调后返回,然后在路由中使用await,但也没有起作用。我还认为我不应该需要在函数和路由中都等待,但是尝试了一下,看看是否有效。
我不确定我缺少/做错了什么。
Promise
吗?如果不是,那么显然你不能直接使用async/await
。 - nicholaswmin