typescript - 打字稿异步生成器编译/类型问题
问题描述
我无法让 Webstorm 对我正在尝试编写的异步生成器感到满意。这个想法是从 Elastic Search 中读取数据并通过 Node 流发送数据。这是代码,然后我将在下面发布错误:
let resultsSent = 0;
let response: SearchResponse<any> = await client.search(query);
async function* resultGenerator(sr: SearchResponse<any>): Promise<IteratorResult<any>> {
for (let hit of sr.hits.hits) {
yield hit;
}
resultsSent += sr.hits.hits.length;
console.log(`Sent ${resultsSent} results from ES to stream.`);
if (sr.hits.total > resultsSent) {
const params: ScrollParams = {
scrollId: response._scroll_id,
scroll: '60s'
};
response = await client.scroll(params);
yield* resultGenerator(response);
}
}
return new Readable({
objectMode: true,
async read(size: number) {
for await (const hit of resultGenerator(response)) {
if (!this.push(hit)) {
return;
}
}
}
});
IDE 抱怨说:
函数返回的正确类型是什么,还是我做错了什么?
解决方案
在生成器函数定义中添加返回类型AsyncGenerator<any>
似乎会让编译器满意。似乎还需要至少 es2019 的 tsconfig lib 目标。
推荐阅读
- google-cloud-vision - Google Vision API Document Text 多张图片,采用 base64 字符串
- c# - C# 实体框架批量更新
- c - 在库中使用外部调试打印功能
- python - 基数为 10'' 的 int() 文字无效
- javascript - 将子文件夹的 index.js 与汇总捆绑在一起,并需要主目录中的模块
- javascript - 使用Javascript正确设置文本框的输入值
- c++ - 给定条件如何维持发生的顺序
- reactjs - React Router 3 没有渲染正确的组件
- elasticsearch - logstash 日期过滤器无法将字段转换为日期类型
- wpf - 数据绑定到静态类的枚举