Использование await и asyn c для загрузки разборов Tau-Prolog перед чем-либо еще - PullRequest
3 голосов
/ 09 апреля 2020

Моя задача - загрузить и проанализировать код Tau-Prolog в Браузере, прежде чем что-либо еще будет выполнено. Я попробовал этот подход (webProlog.pl содержит код Тау-Пролога):

var session = pl.create(1000); 
async function init_prolog() {
    // load tau
     await $.get("/web/webProlog.pl", function(data) {
        parsed = session.consult(data);
        session.query("init.");
        session.answer(printAnswer); // needed for triggering query
    });

    console.log('Prolog init done');
}

Внутри запроса " init " есть сообщение журнала " Инициализация Tau-Prolog выполнена ». Если я не использую await / asny c, сообщение " Prolog Init done " приходит перед сообщением Tau-Prolog, с кодом выше последовательность правильная (сначала Сообщение Тау Пролог, затем инициализация Пролога).

Вопрос в том, что я не JS эксперт. Будет ли это работать со всеми распространенными браузерами, есть ли побочные эффекты или недостатки, которые я не вижу при таком подходе? Есть ли лучшие решения?

Весь код будет продолжен с настройкой Pixi JS.

Приветствия и спасибо за любую подсказку

Ганс

1 Ответ

1 голос
/ 28 апреля 2020

Вы должны выполнить свой код как обратный вызов метода answer:

var session = pl.create(1000); 
function init_prolog() {
    // load tau
    $.get("/web/webProlog.pl", function(data) {
        parsed = session.consult(data);
        session.query("init.");
        session.answer(function(answer) {
            printAnswer(answer);
            console.log('Prolog init done');
        });
    });
}
...