Я создаю это приложение с 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 после запуска приложения для правильной работы потоков?