【发布时间】:2018-09-12 12:09:03
【问题描述】:
在探索 .js 的“生成器函数”时,我成功地尝试使用生成器函数创建提取循环。 我很难做到这一点,因为在尝试将响应解析为 json 时,代码总是在第二次产量上失败。 但是,当我将 data 参数传回 Generator 函数时,一切似乎都运行良好,我似乎不明白为什么。因为生成器函数不使用数据参数。
错误代码:
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();
【问题讨论】:
-
你为什么还要使用生成器而不是使用
async/await? -
只是想更好地理解整个“生成器函数”规范
标签: javascript iterator arguments generator fetch