return fetch(url, {
credentials: 'same-origin',
...options
})
.then(response => response.json())
.then(function*(response) {
console.log("httpStatusCode", response.httpStatusCode)
})

以上可能吗? 当回调函数是生成器时,我没有得到安慰输出,这意味着控件没有传递给回调函数(生成器)。 我想这样做的真正原因是我必须使用'调用'来调用另一个获取请求。来自上述回调的redux-saga的辅助函数,只能从生成函数调用。
答案 0 :(得分:2)
上述情况可能吗?
没有。 then
方法将简单地调用生成器函数并创建一个生成器,但随后丢弃它履行链式承诺,而不是推进它。每当你想使用生成器时,你实际上需要运行它们的东西。
我想这样做的真正原因是我必须使用上述回调中的redux-saga的'call'辅助函数调用另一个获取请求,该函数只能从生成器函数调用。
不。您不必从任意生成器函数调用call
。您可以从redux-saga 使用的生成器函数中调用yield
call()
。
在任何情况下,您的代码应如下所示:
let response = yield take(fetch(url, {
credentials: 'same-origin',
...options
}));
response = yield take(response.json());
console.log("httpStatusCode", response.httpStatusCode)
答案 1 :(得分:2)
我想你可以做到。当生成器函数运行时,它将生成一个生成器对象,它将被传递到下一个阶段,您可以在该阶段启动生成器。我们看看......
var pr = Promise.resolve(42);
pr.then(function*(n){ yield n; yield n / 2; yield 37})
.then(it => {console.log(it.next().value);
console.log(it.next().value);
console.log(it.next().value);
});
答案 2 :(得分:0)
在这里拍摄远景。为了迭代生成器函数,您需要能够调用&gen; gen.next()'。在向' .then'。
提供匿名功能后,这是不可能的我对redux-saga并不熟悉,但从我的理解中你尝试了类似的东西。
function response (data) {
console.log("httpStatusCode", data.httpStatusCode);
}
fetch(url, {...})
.then(function (d) {
var gen = response(d);
})
然后,您可以传递gen
以在redux-saga中使用。