Исследуя «генераторные функции» .js, я успешно попытался создать цикл выборки, используя функцию генератора.
Мне было трудно сделать это, так как код всегда терпел неудачу на втором выходе, когда пытался проанализировать ответ как json.
Но когда я передал аргумент данных обратно в функцию генератора, казалось, что все работает хорошо, я не понимаю, почему. поскольку функция генератора не использует аргумент данных.
Неправильный код:
const URI = 'some.json';
function* fetchGenerator() {
const response = yield fetch(URI);
const json = yield response.json(); //Uncaught (in promise) TypeError: Cannot read property 'json' of undefined
return json
}
const gen = fetchGenerator();
const fetchSteps = () => {
const iterator = gen.next();
if (!iterator.done)
iterator.value.then((data) => { fetchSteps() });
else
document.body.innerHTML = JSON.stringify(iterator.value);
}
fetchSteps();
Правильный код:
const URI = 'some.json';
function* fetchGenerator(data) {
const response = yield fetch(URI);
const json = yield response.json();
return json
}
const gen = fetchGenerator();
const fetchSteps = (data) => {
const iterator = gen.next(data);
if (!iterator.done)
iterator.value.then((data) => { fetchSteps(data) });
else
document.body.innerHTML = JSON.stringify(iterator.value);
}
fetchSteps();