gpt4 book ai didi

javascript - ES2018 Async Generator 的简明部分应用?

转载 作者:行者123 更新时间:2023-11-30 13:46:35 25 4
gpt4 key购买 nike

我定义了一个异步生成器函数,想创建第二个异步生成器函数,它是第一个函数的部分应用。例如,这有效:

async function* fn1(a, b) {/* do something */}

async function* fn2() {
const a1 = fn1(0, 0);
for await (const value of a1) {
yield value;
}
}

我的问题是:是否有更简洁的方法来定义fn2

最佳答案

fn1 返回 fn2 正在迭代的异步可迭代对象,因此无需在 fn2 中手动迭代,您可以直接生成可迭代对象来自 fn1 并让 fn2 的消费者处理它:

async function* fn2() {
yield* fn1(0, 0);
}

const delay = ms => new Promise(res => setTimeout(res, ms));
async function* fn1(a, b) {
for (let i = 0; i < 3; i++) {
await delay(1000);
yield i;
}
}

async function* fn2() {
yield* fn1(0, 0);
}

(async () => {
for await (const val of fn2()) {
console.log('Consumer got', val);
}
console.log('Done');
})();

// Original version, without yield* (just to illustrate equivalence):

const delay = ms => new Promise(res => setTimeout(res, ms));
async function* fn1(a, b) {
for (let i = 0; i < 3; i++) {
await delay(1000);
yield i;
}
}

async function* fn2() {
const a1 = fn1(0, 0);
for await (const value of a1) {
yield value;
}
}

(async () => {
for await (const val of fn2()) {
console.log('Consumer got', val);
}
console.log('Done');
})();

关于javascript - ES2018 Async Generator 的简明部分应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59205559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com