在探索.js的“生成器函数”时,我已成功尝试使用生成器函数创建访存周期。 我很难做到这一点,因为当尝试将响应解析为json时,代码总是在第二次失败时失败。 但是,当我将数据参数传递回Generator函数时,一切似乎都运行良好,我似乎不明白为什么。因为generator函数不使用data参数。
错误代码:
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();
答案 0 :(得分:0)
我似乎不明白为什么。因为generator函数不使用data参数。
实际上,data
的{{1}}参数是没有意义的,但是无论如何这都不是传递数据的地方。您可以使用function* fetchGenerator(data) {
调用generator函数。
承诺结果fetchGenerator();
传递到data
表达式求值的值gen.next(data);
。必须为yield
和response
赋予一个值,否则将无法生成函数。