You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从for await循环的异步生成器中获取返回值

如何获取异步生成器的返回值?

我有如下遍历异步生成器的代码:

for await (const part of resolveData(data)) {
    console.log({part});
}

对应的异步生成器定义:

const resolveData = async function* <T> (data: SomeValue<T>) {
    if (<expression1>) {
        if (<expression2>) {
            console.log("valid");
            yield 1;
        }
    }
    return 2;
}

当前循环输出为{ part: 1 },但我希望获取生成器的返回值(也就是数字2),请问该怎么在循环内部或外部拿到这个值?


要获取异步生成器的return值,for await...of循环是做不到的——这个循环只会处理生成器yield产出的值,对return的结果会直接忽略。你需要手动迭代生成器的迭代器,直到拿到done: true的结果,此时的value就是生成器的返回值。

具体实现代码如下:

// 先实例化异步生成器
const generator = resolveData(data);
let iterResult;

// 手动迭代,处理所有yield出来的值
while (!(iterResult = await generator.next()).done) {
    const part = iterResult.value;
    console.log({part});
}

// 循环结束后,iterResult.value就是生成器的返回值
console.log('生成器返回值:', iterResult.value); // 输出 2

如果不想修改生成器的逻辑,这是最直接的解决方案。要是你可以调整生成器代码,也可以把返回值通过yield产出,但这会改变生成器原本的输出序列,需要根据实际场景判断是否适用。


内容的提问来源于stack exchange,提问作者sss3243

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 10:17:24