Я пишу небольшой скрипт, используя Electron, который вызывает Python скрипт, чтобы сделать снимок экрана окна вместе с записью на текстиль. У меня проблема, когда ожидаемая функция работает не так, как задумано. У меня есть функция-оболочка для функции Vanilla JS setTimeout
, чтобы преобразовать ее в обещание.
function wait(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
Эта функция отлично работает сама по себе, и раньше я использовал ее в других программах без каких-либо вопросы. В этом случае я пытаюсь l oop определенное количество раз и жду установленное время в пределах каждого l oop. Это поведение работает должным образом, если я вызываю wait()
в другом обещании (и в данном случае в событии ipc.once
). Однако, если я вызываю его за пределами обещания, он вместо этого никогда не завершает l oop и просто зависает.
Я не могу понять, почему происходит такое поведение, и я отправил несколько часов, пытаясь понять он вышел, но безрезультатно.
async function takeScreenshot(numPhotos) {
let stream = fs.createWriteStream("labels.manifest", { flags: "a" });
for (let i = 0; i < numPhotos; i++) {
await wait(500);
await new Promise((resolve, reject) => {
// Wait for the front-end script to send the labels
ipc.once("sendLabels", async (event, data, err) => {
if (err) reject(err);
writeManifest(i, stream, data); // Write the manifest file with the given labels
spawn("python", ["screenshot.py", i.toString()], {
cwd: process.cwd(),
detached: true,
stdio: "inherit",
}); // Call the python screenshot script
resolve(); // Resolve the promise
});
});
await win.reload();
}
}
В этом коде с ожиданием вне ipc.once
он не будет завершен по какой-либо причине.
Если кто-то может пролить немного Свет, почему это происходит, я был бы очень признателен!