有没有一种方法可以获取异步js生成器函数的返回值而无需while循环

时间:2020-06-29 15:08:22

标签: javascript typescript

我有一个异步生成器函数,我想只获取其返回值,而无需再次调用。现在我有这样的东西:

async function *getData(): AsyncGenerator<object[], object[]>
{
    let results = []
    let res = {};

    while (true)
    {
        res = await apiCall(res.next);
        results.push(...res.data)
        if (!res.next) break;
        yield res.data;
    }
    return results;
}

async function main()
{
    const genFn = getData();
    while (!(await genFn.next()).done) {}
}

是否有一种更好/更简洁的方式不需要while循环?

1 个答案:

答案 0 :(得分:0)

除了创建一个函数来帮您清理之外,您无能为力。不过,您可以使用 for-await 而不是 while 循环。

async function drainAsyncIterable(iterable) {
  const iterator = iterable[Symbol.asyncIterator]();
  while (!(await iterator.next()).done) {}
}

对比

async function drainAsyncIterable(iterable) {
  for await (const _ of iterable) {}
}