You need to enable JavaScript to run this app. MarkLogic中如何获取xdmp:spawn-function()的返回结果
优惠活动
大模型
产品
解决方案
定价
更多

MarkLogic中如何获取xdmp:spawn-function()的返回结果

xdmp:spawn-function() 返回值获取方案

xdmp:spawn-function() 本身为异步任务调度函数,默认状态下主请求不会等待异步任务执行完成,因此无法直接拿到它的返回结果。有以下几种可行方案可以拿到执行结果:

方案1:开启result选项同步等待返回

在调用时添加 result 配置项,函数会返回一个future对象,调用 xdmp:future() 即可拿到最终返回值,示例代码如下:

let $task := xdmp:spawn-function(
  function() { 
    (: 此处为异步任务执行逻辑 :)
    "异步任务的返回结果" 
  },
  <options xmlns="xdmp:eval">
    <result>true</result>
    (: 可按需添加timeout配置,单位为秒 :)
    <timeout>30</timeout>
  </options>
)
return xdmp:future($task)

注意:该方案会让主请求阻塞等待异步任务执行完成,相当于将异步逻辑转为同步执行,适合任务执行耗时较短、主流程依赖返回结果的场景

方案2:持久化存储中转结果

如果需要保留异步执行的特性、主请求不需要立即拿到结果,可以通过存储中转的方式实现:

  • 主请求生成唯一的任务ID,调用xdmp:spawn-function()时将任务ID传入异步函数
  • 异步函数执行完成后,将返回结果写入数据库,以任务ID作为文档URI或者索引字段
  • 主请求后续可以通过任务ID查询对应存储的结果数据
    建议给中转结果文档设置合理的过期时间,避免无效数据占用存储空间

方案3:回调逻辑处理结果

如果不需要主请求读取结果、只需要拿到结果后做后续处理,可以直接将结果处理逻辑封装到异步函数内部,异步任务执行完成后直接触发后续处理逻辑,无需中转结果给主请求。


内容的提问来源于stack exchange,提问作者ramz123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 15:54:09