21、长运行操作(LRO):Web API 异步调用解决方案

长运行操作(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(.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值