Async/await 云端上传无效
Async/await for cloudinary upload not working
我尝试了几种不同的方法,基本上我想从我的路由中取出 cloudinary 上传代码并将其放入我的路由调用的函数中以使代码更清晰。但出于某种原因,我无法在完成之前让 async/await 到 work/wait 完成上传。
这是我的路线示例:
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;
// }
// });
// }
我把我以前的函数注释掉了,所以你可以看到我试着让函数不异步,只是在回调后返回,在路由中有等待,但也没有工作。我也不认为我应该在函数和路由中都需要等待,但这样试过看它是否有效。
不确定我是什么missing/doing错了。
因为异步函数使用 promises 运行,而 cloudinary SDK 函数 returns 使用回调,你的 uploadToCloudinary
应该看起来像这样:
function uploadToCloudinary(image) {
return new Promise((resolve, reject) => {
cloudinary.v2.uploader.upload(image, (err, url) => {
if (err) return reject(err);
return resolve(url);
})
});
}
我尝试了几种不同的方法,基本上我想从我的路由中取出 cloudinary 上传代码并将其放入我的路由调用的函数中以使代码更清晰。但出于某种原因,我无法在完成之前让 async/await 到 work/wait 完成上传。
这是我的路线示例:
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;
// }
// });
// }
我把我以前的函数注释掉了,所以你可以看到我试着让函数不异步,只是在回调后返回,在路由中有等待,但也没有工作。我也不认为我应该在函数和路由中都需要等待,但这样试过看它是否有效。
不确定我是什么missing/doing错了。
因为异步函数使用 promises 运行,而 cloudinary SDK 函数 returns 使用回调,你的 uploadToCloudinary
应该看起来像这样:
function uploadToCloudinary(image) {
return new Promise((resolve, reject) => {
cloudinary.v2.uploader.upload(image, (err, url) => {
if (err) return reject(err);
return resolve(url);
})
});
}