为什么 yield call(response.json) 挂起?

Why does yield call(response.json) hang?

const response = yield call(fetch, `${config.backendUrl}/verify`, {
  method: 'POST'
})

const responseJson = yield call(response.json)

console.log(responseJson)

这是来自 redux-saga 的代码。 Yield 挂起并且 console.log 不打印任何内容。但是,如果我将 response.json 替换为 () => response.json(),它就会起作用。为什么?

那是因为当您调用 yield call(response.json) 时,调用 response.json 的上下文错误 (this)。

您可以使用 bind(例如 yield call(response.json.bind(response)))或指定 context(例如 yield call([response, response.json]))来解决这个问题,但是 call 确实是无用。您可以:

const responseJson = yield response.json();