|Did you know ...||Search Documentation:|
While section 13.3
asynchronous calling to implement sleep/1,
wait for user input, downloading documents from the web, etc.
Asynchronous calling is achieved by yielding from the Prolog
virtual machine. This can only be done when Prolog is told to expect
that the VM may yield. This is implemented by
as described in section
Prolog.forEach(), execution of await/2 completes when the Promise resolves and Result is unified with the value passed to the
Promise.then()method. As an exception to the normal conversion rules, if the result is a single
String, it is returned as a Prolog string rather than an atom. When the Promise is rejected await/2 throws an exception. Note that await/2 allows, for example, downloading a URL from Prolog:
?- FP := fetch("test.pl"), await(FP, Response), TP := Response.text(), await(TP, T). FP = <js_Promise>(4), Response = <js_Response>(5), TP = <js_Promise>(6), T = "% :- debug(js) ...".