长运行操作(LRO):Web API 异步调用解决方案
1. 问题提出
在使用 API 时,我们常常会遇到一些长时间运行的操作。如果在操作进行过程中,我们不再对结果感兴趣,那么当前正在进行的工作就会白白浪费。然而,目前我们所看到的 API 设计并不能很好地满足这一需求,期望现有的模式来处理这些长时间运行的 API 调用也不太合理。那么,我们该如何解决这个问题呢?这就引出了长运行操作(Long-running operations,简称 LRO)的设计模式。
2. 概述
这个问题并非 Web API 所独有,在本地程序执行中也很常见。我们希望执行一些可能需要一段时间才能完成的任务,但同时又希望程序在等待这些缓慢函数执行的过程中能够继续处理其他工作。许多现代编程语言都为此创建了相应的结构来处理这种异步行为,例如 Python 中的 Futures 和 JavaScript 中的 Promises。它们的目标很简单:启动某项工作,但不一定阻塞程序执行,而是返回一个代表该工作占位符的对象。然后执行工作,让占位符最终要么成功解析(返回结果),要么拒绝(抛出错误)。用户可以通过注册回调函数来异步处理结果,或者等待结果返回,在占位符解析或拒绝之前阻塞代码执行(实际上将异步工作同步化)。
以下是一些代码示例:
async function factor(value: number): Promise<number[]> {
// ...
}
async function waitOnPromise() {
let factors = await factor(.
超级会员免费看
订阅专栏 解锁全文
95

被折叠的 条评论
为什么被折叠?



