我已经阅读了大量关于'redux-saga'的教程,并了解如何构建我的reducer和saga以直接执行。我所遇到的问题是,我不知道以返回我可以使用的东西的方式实际获取请求的数据。大多数人实际使用什么来获取所请求的数据?
这是我的请求:
import { call } from 'redux-saga/effects';
export function* request(url, method, body) {
try {
const result = yield call(fetch, url, { method: method, body: body });
return {err: null, res: result };
} catch(error) {
return {err: error, res: null };
}
}
. ."yield call(fetch…)"在Chrome中返回一个ReadableStream,如果我使用"同构fetch",就像我用redux-thunk一样,它返回一个承诺。在我看来,我不能在生成器函数中使用promise。
我确信这可能是一个简单的代码行来消费结果,但我似乎找不到它。任何帮助都是感激的!
因此,互联网上所有(或大多数)示例的答案是,我需要在包装器函数中解析承诺,然后我可以按预期使用生成器。下面的例子:
使用react、redux和redux-saga构建图片库
我将请求生成器拆分为两个独立的方法,并在helper函数中完全解析了promise。最终结果如下:
import { call } from 'redux-saga/effects';
import fetch from 'isomorphic-fetch';
const actualRequest = (method, url, body) => {
return fetch(url, { method: method, body: body })
.then( response => response.json()
.then( json => json ));
}
export function* request(method, url, body) {
try {
const result = yield call(actualRequest, method, url, body);
return {err: null, res: result };
} catch(error) {
return {err: error, res: null };
}
}
这仍然允许我像以前一样使用'isomorphic-fetch',但仍然使它成为一个传奇。