异步/等待cloudinary上传不起作用

时间:2018-12-19 14:57:20

标签: node.js async-await cloudinary

我尝试了几种不同的方法,基本上我想从路由中取出cloudinary上传代码,并将其放入路由调用的函数中,以使代码更简洁。但是出于某种原因,我无法让异步/等待工作/等待上传完成才能完成。

以下是我的路线示例:

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;
//       }
//    });
// }

我放了以前使用过的注释掉的函数,因此您可以看到我尝试使该函数不异步,只是在回调后返回,并且在路由中等待,但也没有起作用。我也不认为我应该同时在函数和路由中等待,而是尝试那样看是否有效。

不确定我错过了什么/做错了什么。

1 个答案:

答案 0 :(得分:3)

由于异步函数与promises一起运行,而cloudinary SDK函数与回调一起返回,因此您的uploadToCloudinary应该如下所示:

function uploadToCloudinary(image) {
  return new Promise((resolve, reject) => {
    cloudinary.v2.uploader.upload(image, (err, url) => {
      if (err) return reject(err);
      resolve(url);
    })
  });
}