Node.js ReadStream застрял на Electron при передаче в Hash - PullRequest
0 голосов
/ 09 февраля 2020

Я создаю это приложение с vue -cli и vue -cli-plugin-electronic-builder , и у меня возникла странная проблема, указав c к электрону, где после запуска приложения первый созданный ReadStream не будет передавать его содержимое в данный поток.

Теперь, обновление приложения через CTRL + F5 заставит потоки работать снова, и с этого момента больше не будет проблем.

Мой текущий код похож на вызывается в потоке рендеринга после запуска приложения:

public async run() {
  await this.scanFolder("/some/path/to/a/folder");
}

private async scanFolder(path: string){
  const entries = readdirSync(path, { withFileTypes: true });

  for (const entry of entries){
    if (!entry.isDirectory()){
      const md5 = await calculateMD5(path + "/" + entry.name);
    }
  }
}

public static async calculateFileMD5(path: string) {
  const md5 = createHash("md5");
  md5.setEncoding("hex");

  console.log("Creating promise");
  const promise = new Promise<string>((resolve, reject) => {
    const fileStream = createReadStream(path, {
      autoClose: true,
      emitClose: true
    });

    fileStream.on("open", () => console.log("STREAM OPEN"));
    fileStream.on("ready", () => console.log("STREAM READY"));
    fileStream.on("close", () => {
      console.log("Stream closed");
      resolve(md5.read());
    });

    fileStream.on("data", data => {
      console.log(data);
    });

    fileStream.on("end", () => {
      console.log("Stream ENDED");
      resolve(md5.read());
    });

    fileStream.on("error", error => {
      console.error(error);
      reject(error);
    });

    console.log("Piping to MD5");
    fileStream.pipe(md5, { end: true });
    fileStream.resume();
    console.log("Is paused?: " + fileStream.isPaused());
  });
  console.log("Returning promise");
  return promise;
}

Запуск приложения с помощью npm run electron:serve и вызов функции run приведут к следующему:

Creating promise
Piping to MD5
Is paused?: false
Returning promise
STREAM OPEN
STREAM READY

Теперь, если приложение перезагружается через CRTL + F5, поток корректно передает его содержимое в Ha sh.

Могу ли я что-нибудь сделать, чтобы он не требовал refre sh после запуска приложения для правильной работы потоков?

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