Асинхронный код в gjs завершается до вызова обратного вызова
Когда я пытаюсь запустить асинхронный код, такой как чтение файла или отправка http-запроса, программа завершается непосредственно перед вызовом обратного вызова.
1 ответ
Решение
В отличие от JavaScript в браузере, программы gjs завершают работу сразу после завершения основного кода, чтобы дождаться обратных вызовов, нам нужно заставить основной код ждать его с помощью GLib.MainLoop. Например, отправка асинхронного http-запроса и ожидание его будет выглядеть следующим образом:
const loop = new GLib.MainLoop(null, false);
session.queue_message(request, function(session, message) {
print('Download is done');
loop.quit();
});
loop.run();