我正在尝试将编码后的图像文件放入base64,并将其放入对象(responseData)和res.json(responseData)。
问题是在base64编码完成之前发送了响应。 如何延迟发送响应,直到编码完成。
P.S我不确定在json文件中发送图像是否正确。
router.get("/", async (req, res) => {
let responseData;
await Story.find().then(storiesData => {
responseData = [...storiesData];
storiesData.map((storyData, storyIndex) => {
responseData[storyIndex].imageFiles = [];
gfs.files
.find({ _id: { $in: storyData.image } })
.toArray((err, files) => {
files.map((file, imageIndex) => {
let data = [];
var readstream = gfs.createReadStream({
_id: file._id
});
readstream.on("data", chunk => {
data.push(chunk);
});
readstream.on("end", () => {
imageData = Buffer.concat(data);
responseData[storyIndex].imageFiles[imageIndex] = new Buffer(
imageData
).toString("base64");
});
});
});
});
return new Promise((resolve, reject) => {
resolve();
});
});
res.json(responseData);
});
答案 0 :(得分:0)
我认为类似的方法可能有用
total
地图返回了一个Promise数组,因此在完成每个操作后,它会发送responseData,检查最终结果是否符合您的要求(如果不适应您的需求,但是总体思路是否存在)。