如何等待直到base64编码完成

时间:2018-12-31 00:23:38

标签: javascript node.js

我正在尝试将编码后的图像文件放入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);
  });

1 个答案:

答案 0 :(得分:0)

我认为类似的方法可能有用

total

地图返回了一个Promise数组,因此在完成每个操作后,它会发送responseData,检查最终结果是否符合您的要求(如果不适应您的需求,但是总体思路是否存在)。