So, we're doing some king of development with our AC installation. This "some kind" means: defining our own Forms, calling our own Schema's methods via SOAP on enter and leave and all that stuff.
So far so good, but the question came up: is JS engine in AC totally synchronous? As I see now, even HttpClientRequest and I/O (File and Memory Buffer methods) are synchronous and the js-api helpfile we've got from Support isn't describing everything AC has (great stuff like NL.toDebugString is missed totally).
The other question is: what version of JS/ECMA it is? I'm wondering because e.g. list comprehensions are impossible, but they were introduced in JS back in 2006, and 'let' operator seems to work at the same time (btw, is it actuall 'let' with block scope?).
In shorten, questions are:
1. Is there any event mechanism? Is there anything working in async?
2. What JS engine provided? Fully custom?
3. If no async at all, is only 1 thread running for everything? E.g. if 50 users will work with the same Form which calls number of Schema's methods via SOAP - soaprouter will place all calls in queue? Same for Workflows: if only 1 process is dedicated for all Workflows - there should be queue of running Workflows and only one activity running at any time (especially if they're also written in JS stored in the system and not coded into the core), no?
This is pretty interesting: SOAP calls are async, but general HttpClientRequest - not.
And thanks for pipelines doc - we'll try it for sure when after updating our instances.
NL.toDebugString is defined in xtk:shared/nl.js file and acts like JSON.stringify() with some AC-specific additions.
I found it useful to examine data returned by some activities e.g. 'Update data' as with it you can simply dump to log the entire XML structure without accessing its fields (for instance, if you're not sure of their names).
then you can choose the wfserver engine in the workflow property/Execution tab (Affinity listbox). for all the workflow, or if it is on a specific task, the Advanced Tab of the task and Affinity list box.
Please check also in the advanced parameters of a task, the behavior listbox, by default multi-tasking but you can force for priority/1 task only.
Regarding asynchronous tasks:
1. there is an example of non-blocking calls with callback function for SOAP call in SoapService method, in the JSAPI documentation. And see also SoapService.wait function.
2. I find something interesting in AC but quite recent builds, the pipeline process (using Apache Kafka). While it seems to being implemented for coupling Adobe Analytics and AC, perhaps it is valuable for local and on premises installation (I didn't had time to activate it yet on my On Premise machines).