试图等到多个图像上传到 cloudinary
Posted
技术标签:
【中文标题】试图等到多个图像上传到 cloudinary【英文标题】:Trying to wait until multiple images upload to cloudinary 【发布时间】:2021-12-02 13:15:26 【问题描述】:我被困在尝试将多个图像上传到 Cloudinary 并在响应中将数组中的 cloudinary url 发回。我一直在想办法在发回 photoAlbum 数组之前等待循环完成,但没有运气。代码看起来像这样:
server.js
app.post('/uploadimages', async (req, res) =>
const imgFiles, username = req.body;
const photoAlbum = await cloudinaryUpload(imgFiles, username)
res.send(photoAlbum)
)
cloudinary.js
require("dotenv").config()
const cloudinary = require("cloudinary").v2
module.exports.cloudinaryUpload = async (imgFiles, username) =>
const photoAlbum = []
await imgFiles.forEach((img) =>
const imageid = uuidv4();
cloudinary.uploader.upload(
img,
folder: username,
resource_type: "image",
public_id: imageid,
).then((result) =>
console.log("*** Success: Cloudinary Upload: ", result.url);
photoAlbum.push( imageid: imageid, url: result.url );
).catch((err) =>
console.log("*** Error: Cloudinary Upload");
)
)
console.log("Cloudinary upload done: ", photoAlbum);
return photoAlbum;
【问题讨论】:
【参考方案1】:forEach
将始终返回 void
- 在 JS 中未定义 - 无论回调如何。您想要做的是返回一系列承诺,然后等待它们全部完成。
为此,您应该使用map
和Promise.all
的组合。
const promises = imgFiles.map(() =>
const imageid = uuidv4();
return cloudinary.uploader.upload(
img,
folder: username,
resource_type: "image",
public_id: imageid,
).then((result) =>
console.log("*** Success: Cloudinary Upload: ", result.url);
photoAlbum.push( imageid: imageid, url: result.url );
).catch((err) =>
console.log("*** Error: Cloudinary Upload");
);
);
await Promise.all(promises);
map
函数创建了一个新的 promise 数组,这要归功于 return cloudinary.uploader.upload
,Promise.all
与 await
结合使用,等待所有图像上传。
【讨论】:
以上是关于试图等到多个图像上传到 cloudinary的主要内容,如果未能解决你的问题,请参考以下文章
使用 Multer 和 Express 将多个图像上传到 Cloudinary
如何使用 javascript 将多个图像上传到 cloudinary 并将 url 发送到另一个数据库