我正在构建一个简单形式的应用程序。您将查询放在许多表单元素中,然后单击提交。
这会向第三方 API 提交(相当)大量 API 调用,以在第三方应用程序中创建必要的对象,执行它们,然后将结果返回给我的应用程序。
该过程需要 5-30 秒。
我想要做的是部分呈现结果(想想 SQL IDE,如 SSMS 或 TOAD 或其他任何东西 - 顶部的输入,返回下面的结果)。我希望这个部分在流程中的每个步骤之后刷新并向用户显示任务的状态。目前,该应用程序只是坐着旋转,直到所有这些复杂且 IO 繁重的业务逻辑完成,这导致了糟糕的用户体验。
因此,假设通过 3rd 方 API 采取的步骤是:
创建小部件
启动小部件
监控小部件状态
完成后,将最终结果返回给用户。
我想要做的是有一个变量,比如@status,它包含上述过程的当前执行。“Creating Widget...”等。这会在任务完成时向用户显示。
每当这些任务之一完成时,我如何重新渲染部分?它应该轮询服务器吗?在完成上述步骤之前,我将如何在没有线程锁定的情况下轮询运行服务器端的进程?
目前,这没有写入数据库,由于负载限制,我想尽可能地让数据库远离这个。
现在,我知道轮询操作的不同方法(通过 jquery 进行 AJAX),主要使用 setinterval/timeout 来调用控制器操作并重新渲染,但如果在该操作中引用了我的 API 调用方法,它只是无论如何都要等到一切都完成。
有什么想法吗?