XQuery:在查询执行完成之前返回一些内容

XQuery:在查询执行完成之前返回一些内容,xquery,exist-db,Xquery,Exist Db,在我的web应用程序中,整个搜索页面都是用XQuery编写的。查询不仅查找和显示结果,还将搜索词写入协议文件(在eXist db中,这可以通过file:serialize-函数实现) 然而,编写协议可能需要一些时间。当然,用户不应该受到这种延迟的影响。因此,我想首先输出搜索结果,然后更新协议 我尝试在返回内容后放置协议函数,如: return $search_results,localfunction:write_protocol() (函数localfunction:write_protoc

在我的web应用程序中,整个搜索页面都是用XQuery编写的。查询不仅查找和显示结果,还将搜索词写入协议文件(在eXist db中,这可以通过
file:serialize
-函数实现)

然而,编写协议可能需要一些时间。当然,用户不应该受到这种延迟的影响。因此,我想首先输出搜索结果,然后更新协议

我尝试在返回内容后放置协议函数,如:

return $search_results,localfunction:write_protocol()
(函数
localfunction:write_protocol()
始终返回空序列
()

但这不起作用。
$search\u results
的内容仅在
localfunction:write\u protocol()
完成后输出


这里有什么我能做的吗?(我知道,在PHP等更具过程性的语言中,这样的事情也是有问题的。)

您可以将相关的协议数据写入数据库中的集合,而不是编写外部文件吗

然后,您可以使用XQuery触发器处理该集合并将数据写入外部文件


还可以选择使用util:log app自定义日志文件。

我建议使用eXist中的调度程序模块来调度XQuery任务,以编写协议文件。调度器模块提供了几个XQuery函数,您可以从主查询中使用这些函数来调度子任务;这将异步执行到查询的其余部分。

如果我理解正确,这并不是XQuery特有的。您可以将页面拆分为两个请求,首先返回快速请求,然后通过AJAX查询第二个请求。当然,将协议条目写入数据库而不是外部文件是可能的,而且可能更方便。但是,问题仍然是一样的:XQuery只会在完成执行后返回搜索结果。因此,用户必须等待协议条目写入数据库,然后才能看到搜索结果。