【发布时间】:2020-12-12 01:20:28
【问题描述】:
async 生成器能否以某种方式广播或多播,以便其所有迭代器(“消费者”?订阅者?)接收所有值?
考虑这个例子:
const fetchMock = () => "Example. Imagine real fetch";
async function* gen() {
for (let i = 1; i <= 6; i++) {
const res = await fetchMock();
yield res.slice(0, 2) + i;
}
}
const ait = gen();
(async() => {
// first "consumer"
for await (const e of ait) console.log('e', e);
})();
(async() => {
// second...
for await (const é of ait) console.log('é', é);
})();
迭代“消耗”一个值,所以只有一个或另一个得到它。
如果可以以某种方式创建这样的生成器,我希望他们两个(以及以后的任何一个)都能获得每个 yielded 值。 (类似于Observable。)
【问题讨论】:
-
您是否可以更改设计以使
gen接受应用于每个已生成事物的回调函数?您是否有特定原因想要/需要使用生成器? -
@kingkupps 是的
gen可以接受回调。我正在使用异步生成器,因为它们是 JS 的内置功能,否则我会为此使用Observable,但我认为它们几乎做同样的事情(除了“多播”的能力)
标签: javascript async-await observable ecmascript-2016