async module vs xq-promise

Thursday, 24 March 2016 · 2 messages · last reply 28 Mar 2016
MG
Maximilian Gärber24 Mar 2016 14:43 #
Hi all, I just started to use the async module and I guess I am out of sync about the relation to xq-promise: Basex now has asyn:fork-join which exectues in parallel and comes back with all results xq-promise has p:fork-join which seems to be the previous implementation Could I swap one for the other? Side note: async:eval which works like xquery:eval is great, but I have to do something like this for functions:
let $ids := async:eval("declare variable $f external; declare variable
$name external; $f($name)", map { 'f': '_:get-meta', 'name' : $name })

return $ids
With get-meta being a local function that accepts a single parameter. Is there an easier way to do this? Regards, Max
CG
Christian Grün28 Mar 2016 13:21 #
Hi Max,
Quoted text · Maximilian Gärber · 2 lines
> xq-promise has p:fork-join which seems to be the previous implementation > Could I swap one for the other?
Right! A side note: I have slightly extended our documentation, because I guess it was not clearly to everyone what’s the difference between parallel and asynchronous execution [1].
Quoted text · Maximilian Gärber · 7 lines
> let $ids := async:eval("declare variable $f external; declare variable > $name external; $f($name)", map { 'f': '_:get-meta', 'name' : $name }) > return $ids > ``` > > With get-meta being a local function that accepts a single parameter. > Is there an easier way to do this?
Hm. If you have a single argument, you could bind it to the context item:
  async:eval(".", map { '': $var })
If you have several variables, it may be better to write an extra function, which prefixes your query with additional variable declarations (see e.g. here: [2]). Best, Christian [1] http://docs.basex.org/wiki/Async_Module [2] https://github.com/BaseXdb/basex/blob/master/basex-api/src/main/webapp/dba/modules/util.xqm#L78-L96
Quoted text · Maximilian Gärber · 5 lines
> > > Regards, > > Max

⚡Generated with XQuery