【问题标题】:Async iterators and generators: Streaming GeoJSONL异步迭代器和生成器:流式 GeoJSONL
【发布时间】:2020-09-13 20:36:48
【问题描述】:
我正在尝试复制 Brett Camper's code 关于流式 GeoJSONL 文件的内容,这非常复杂。
我正在尝试逐步了解它的作用,但我真的无法弄清楚这种语法的作用:
streamGeoJSONL = async ƒ*(url)
谁能给我解释一下?如果可能的话,我想在Mozilla web docs 上找到有关它的信息。
另外,如果有人可以向我解释给定示例中的代码流程,我将不胜感激!
谢谢!
【问题讨论】:
标签:
javascript
async-await
async-iterator
【解决方案1】:
每当您看到语法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
您可以使用AsyncIterator 和for await...of
for await (const newFeatures of streamGeoJSONL(url)) {/* do stuff with newFeatures */}
在您的示例中,newFeatures 采用 streamGeoJSONL 中的关键字 yield 发回的值
async function* streamGeoJSONL(url) {
// ...
yield lines.map(JSON.parse) // this is newFeatures
} // AsyncGenerator