javascript - 如何使用单击事件侦听器处理异步生成器
问题描述
我有一个异步生成器,它在调用 next() 时产生更新的值。我想在每次点击时调用 next() 但似乎没有调用生成器并且它总是返回第一个值我该如何处理?
const baseApi = `https://hacker-news.firebaseio.com/v0`;
const topStories = [
19571054,
19570735,
19570986,
19571139,
19571399,
19569865,
19561411,
19571027,
19560994
];
const fetchAsyncA = async url => await (await fetch(url)).json();
const sliceBy = (list, start, end) => list.slice(start, end);
async function* hackerNewsStreamer(ids, slice) {
let start = 0;
while (start <= ids.length) {
let urls = sliceBy(ids, start, start + slice).map(
id => `${baseApi}/item/${id}.json?print=pretty`
);
yield await Promise.all(urls.map(fetchAsyncA));
start += slice;
}
}
document.querySelector("button").addEventListener("click", async () => {
const articlesStream = hackerNewsStreamer(topStories, 5);
const { value: articles } = await articlesStream.next();
console.log(articles);
//console.log(await articlesStream.next());
//console.log(await articlesStream.next());
//console.log(await articlesStream.next());
});
解决方案
推荐阅读
- php - 如何通过托管在同一域中的另一个 laravel 应用程序访问 php 应用程序的会话?
- kubernetes-helm - 根据 Helm 图表中的变量值动态访问值
- smartsheet-api - Smartsheet - 从 Teradata 或/和 Power BI 获取数据
- jquery - Wordpress 读取 jQuery,但它的方法不起作用
- sql - 我如何从最小和最大组中获取日期?
- javascript - 使用 SPservices 将文件上传到 Sharepoint 列表
- typescript - 基类属性初始化器
- r - 有没有办法在名称中包含多个单词,而不必在每个名称周围显示单引号或至少隐藏它们?
- php - 我正在使用数据表和数据加载速度非常慢的 CodeIgniter 框架
- java - Base64 到字节数组解码优化 - Java