0

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

以上可能吗?当回调函数是生成器时,我没有得到控制台输出,这意味着控件没有传递给回调函数(生成器)。我想这样做的真正原因是我必须使用上述回调中的 redux-saga 的 'call' 辅助函数调用另一个 fetch 请求,该回调只能从生成器函数调用。

4

3 回答 3

2

以上可能吗?

不。该then方法将简单地调用生成器函数并创建一个生成器,然后丢弃它来履行链式承诺,而不推进它。每当您想使用生成器时,您实际上都需要运行它们的东西。

我想这样做的真正原因是我必须使用上述回调中的 redux-saga 的 'call' 辅助函数调用另一个 fetch 请求,该回调只能从生成器函数调用。

没有。您不必call从任意生成器函数调用。您可以从redux-saga 使用的生成器函数中调用 和yielda 。call()

无论如何,您的代码应如下所示:

let response = yield take(fetch(url, {
    credentials: 'same-origin',
    ...options
}));
response = yield take(response.json());
console.log("httpStatusCode", response.httpStatusCode)
于 2016-08-04T07:05:59.950 回答
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);
              });

于 2016-08-04T07:17:31.373 回答
0

在这里长镜头。为了遍历生成器函数,您需要能够调用“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 中使用。

于 2016-08-04T07:13:58.897 回答