【发布时间】:2020-09-14 22:00:00
【问题描述】:
我正在向 API 发出请求,但他们的服务器只允许一定数量的活动连接,因此我想限制正在进行的提取次数。就我而言,只有在 HTTP 响应正文到达客户端时才完成(而不是正在进行)提取。
我想创建一个这样的抽象:
const fetchLimiter = new FetchLimiter(maxConnections);
fetchLimiter.fetch(url, options); // Returns the same thing as fetch()
这会使事情变得简单得多,但似乎无法知道其他代码正在使用的流何时结束,因为流在被读取时被锁定。可以使用ReadableStream.tee() 将流一分为二,使用一个并将另一个返回给调用者(可能还用它构造一个Response),但这会降低性能,对吧?
【问题讨论】:
-
你可以为你的调用者构造一个假的
Response,你可以控制调用者将使用的流。 -
@Bergi 然后将真实的流通过管道传输到其中?听起来是个好主意,但我不确定它对性能的影响。
-
我很确定它的性能会比
tee()ing 流甚至clone()ing 响应更好。但可以肯定的是,如果您足够关心,就必须进行基准测试。 -
另一种方法是将回调函数传递给应该处理响应的
fetchLimiter,并等待其结果排队等待。这是处理异步“资源”使用的一种非常标准的方法。
标签: javascript fetch-api whatwg-streams-api