redux-saga call fetch json Failed to execute 'json' on 'Response': Illegal invocation

不才
2019-11-05 03:40:57

Failed to execute 'json' on 'Response': Illegal invocation

// 问题复现
{
	*getData(_, { call, put }) {
		 // 获取数据
		 const res = yield call(fetch, '/api/list');
		 const list = yield call(res.json); //  Failed to execute 'json' on 'Response': Illegal invocation 
		put({
			type: 'change',
			payload: list
		});
	},
}

问题分析

查看相关文档

Body.json()
Body mixin 的 json() 方法接收一个 Response 流,并将其读取完成。它返回一个 Promise,Promise 的解析 resolve 结果是将文本体解析为 JSON。

**可以看到 jsonMIXIN的方法 分析可能是json 上下文被 call 对象改变 **

问题解决

手动绑定上下文

const list = yield call(res.json.bind(res));