3

我的任务是在执行任何其他操作之前在浏览器中加载和解析 Tau-Prolog 代码。我尝试了这种方法(webProlog.pl 包含 Tau-Prolog 代码):

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 init done ”。如果我不使用 await/asnyc,则消息“ Prolog Init done ”出现Tau-Prolog 消息之前,上面的代码序列是正确的(第一个 Tau Prolog 消息,然后是 Prolog init done)。

问题是:我不是 JS 专家。这是否适用于所有常见的浏览器,这种方法是否有我看不到的副作用或缺点?有更好的解决方案吗?

整个代码将继续 PixiJS 的东西设置。

干杯,感谢任何提示

汉斯

4

1 回答 1

1

您必须将代码作为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');
        });
    });
}
于 2020-04-27T21:24:43.863 回答