Как обеспечить полную сборку трубопроводов? - PullRequest
0 голосов
/ 12 июля 2020

В настоящее время я работаю с потоками в Node.js, где я беру изображение из своей БД, используя node-canvas, чтобы внести некоторые изменения в изображение, а затем сохраняю изображение локально в моем проекте. Я хочу быть абсолютно уверен в том, что трубопровод полностью готов, прежде чем сохранять изображение (чтобы не получить обрезанные изображения). Как я могу это сделать?

Моя попытка

async function makeCanvas(img, code, channel) {
  const canvas = createCanvas(900, 1375);
  const ctx = canvas.getContext("2d");
  ctx.fillStyle = "#000000";
  ctx.fillRect(0, 1255, 900, 120);
  // ctx.fillRect(0, 0, 900, 1375);
  let image = await loadImage(img);
  ctx.font = "bold 100px 'Unisans Heavy'";
  ctx.textAlign = "center";
  ctx.fillStyle = "#FFFFFF";
  ctx.fillText(`${code}`, 435, 1350);
  const writeable = fs.createWriteStream(`./temp/${channel.id}.png`);
  const readable = canvas.createPNGStream();
  const pipeConnect = await readable.pipe(writeable);
  let ended;
  let path;
  await readable.on("end", () => {
    ended = readable["_readableState"].ended;
  });

  if (ended) {
    path = writeable.path;
  } else {
    console.log("File not ready.");
  }
return path;
}

Я пытаюсь переназначить переменную ended, чтобы узнать, закончилась ли операция, и если он закончен, затем что-то с ним делаем. Но похоже, что я не могу переназначить значение ended в прослушивателе событий. Что я мог сделать вместо этого?

1 Ответ

0 голосов
/ 12 июля 2020
await readable.on(“end”, ...

Это не то, чего вы можете ждать, потому что он не возвращает Promise. Чтобы можно было использовать ожидание, рассмотрите возможность использования require('events').once. Как это:

await once(readable, "end");

См. документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...