Асинхронный код в 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();
Другие вопросы по тегам