异步迭代器和生成器:Streaming GeoJSONL

Async iterators and generators: Streaming GeoJSONL

我正在尝试复制 Brett Camper's code 关于流式 GeoJSONL 文件的内容,它非常复杂。

我正在逐步了解它的作用,但我真的无法弄清楚这个语法的作用:

streamGeoJSONL = async ƒ*(url)

谁能给我解释一下?如果可能的话,我想在 Mozilla web docs.

上找到一些相关信息

此外,如果有人能向我解释给定示例中的代码流程,我将不胜感激!

谢谢!

只要你看到语法 async function*,就意味着该函数是一个 AsyncGenerator。您可以通过在其生成的 AsyncIterator

上使用 for await...of 来使用 AsyncGenerator
async function* streamGeoJSONL(url) {...} // AsyncGenerator

const url = "https://s3.amazonaws.com/vtiles/honolulu_hawaii.geojsonl"

streamGeoJSONL(url) // => AsyncIterator

当您调用 AsyncGenerator 时,您会得到一个 AsyncIterator。这就是 AsyncGenerator 生成的:一个 AsyncIterator

您可以用 for await...of

消耗一个 AsyncIterator
for await (const newFeatures of streamGeoJSONL(url)) {/* do stuff with newFeatures */}

在您的示例中,newFeaturesstreamGeoJSONL

中关键字 yield 发回的值
async function* streamGeoJSONL(url) {
  // ...
  yield lines.map(JSON.parse) // this is newFeatures
} // AsyncGenerator