如何(异步地)使用由仆人的 StreamGenerators 生成的 steaming 端点?

How to (asynchronously) consume a steaming end-point generated with servant's StreamGenerators?

仆人文档描述了如何创建 streaming endpoints:

type StreamAPI = "userStream" :> StreamGet NewlineFraming JSON (StreamGenerator User)
streamAPI :: Proxy StreamAPI
streamAPI = Proxy

streamUsers :: StreamGenerator User

现在的问题是客户端(例如用 javascript 编写的)如何以异步方式使用端点?

注意:在较新的 servant (0.15 IIRC) 中重构了流式传输。但是,如何在 JavaScript 中使用 流端点 的问题与后端实现无关。

例如,如果你使用Fetch API,你可以使用reader API,这在[=14=中有很好的解释].总结一下:

// Fetch the original image
  fetch('./tortoise.png')
  // Retrieve its body as ReadableStream
  .then(response => {
    const reader = response.body.getReader();

然后您可以调用 reader.read() 以获取部分响应。