javascript break в цикле for-await завершает работу генератора

Я написал этот код, чтобы перебирать проблемы github с определенным числом (например, разбиение на страницы), в данном случае сразу с 3 проблемами:

      const getUrl = (page) => `https://api.github.com/repos/angular/angular/issues?page=${page}`;

const getIssues = async function*() {
    for (let p = 1; true; p++) {
        const url = getUrl(p);
        const rawData = await fetch(url, {
            headers: { 'User-Agent': 'app' }
        });
        const issues = await rawData.json();
        for (let issue of issues) {
            yield issue;
        }
    }
};

const generator = getIssues();

document.querySelector('[data-next]').addEventListener('click', async function() {
    let i = 0;
    for await (let issue of generator) {
        console.log(issue);
        if (++i === 3) break;
    }
    console.log(await generator.next());
});

Элемент с атрибутом data-next - это кнопка. Ожидаемое поведение - каждый щелчок по кнопке загружает следующие 3 проблемы. Проблема в том, что генератор завершил работу после перерыва (журнал console.log печатает это: {value: undefined, done: true}).

Почему он закончен и как я могу заставить его работать так, как ожидалось?

1 ответ

Это известная проблема / особенность, которая for..ofзавершает работу генератора (см., например, здесь ). Одно из возможных решений - предоставить прокси, который будет сохранять фактическое состояние генератора при закрытии:

Другие вопросы по тегам