Reactjs A';收益率';表达式仅允许在生成器主体中使用
我正在使用Reactjs A';收益率';表达式仅允许在生成器主体中使用,reactjs,redux,redux-saga,Reactjs,Redux,Redux Saga,我正在使用reduxsaga获取服务器api数据。 我的问题是,我正在尝试设计以下代码 然而yield put(get01Action(members))有以下语法错误 A 'yield' expression is only allowed in a generator body. 我不知道如何管理它 import '@babel/polyfill'; import { fork, take, put } from 'redux-saga/effects'; import axios fro
reduxsaga
获取服务器api数据。
我的问题是,我正在尝试设计以下代码
然而yield put(get01Action(members))注释掉的代码>有以下语法错误
A 'yield' expression is only allowed in a generator body.
我不知道如何管理它
import '@babel/polyfill';
import { fork, take, put } from 'redux-saga/effects';
import axios from "axios";
export function* rootSaga(){
yield fork(fetch01);
yield fork(fetch02);
}
function* fetch01() {
while (true){
yield take('FETCH01_REQUEST');
axios.get('/api/members')
.then(function (response) {
// handle success
let members = response.data.data;
// yield put(get01Action(members));
})
.catch(function (error) {
// handle error
console.log(error);
})
.finally(function () {
// always executed
});
}
}
function* fetch02() {
....
}
function get01Action(members){
return {
type: 'GET_MEMBERS',
member_id: 0,
members: members
}
}
请给我一些建议
谢谢。您可以使用通话效果进行axios通话,然后就可以使用put了
现在它不起作用,因为你正在使用收益率来收回承诺
function* fetch01() {
while (true){
try {
yield take('FETCH01_REQUEST');
const response = yeild call(axios.get, '/api/members');
yield put(get01Action(response.data.data))
} catch(err) {
console.error(err)
}
}
}您可以使用call effect进行axios调用,然后就可以使用put了
现在它不起作用,因为你正在使用收益率来收回承诺
function* fetch01() {
while (true){
try {
yield take('FETCH01_REQUEST');
const response = yeild call(axios.get, '/api/members');
yield put(get01Action(response.data.data))
} catch(err) {
console.error(err)
}
}
}因为您的生成器fetch01
是同步的,但您正在等待承诺的解决
yield
不能包装在生成器以外的其他函数中
您可以使生成器异步,如下所示:
导出异步函数*rootSaga(){
收益等待叉(fetch01);
屈服叉(fetch02);
}
异步函数*fetch01(){
while(true){
让步接收(“FETCH01_请求”);
试一试{
const response=wait axios.get('/api/members');
//成功
让成员=response.data.data;
收益率看跌期权(GET01行动(成员));
}捕获(错误){
//处理错误
console.log(错误);
}最后{
//总是执行
}
}
}
因为您的生成器fetch01
是同步的,但您正在等待一个承诺
得到解决
yield
不能包装在生成器以外的其他函数中
您可以使生成器异步,如下所示:
导出异步函数*rootSaga(){
收益等待叉(fetch01);
屈服叉(fetch02);
}
异步函数*fetch01(){
while(true){
让步接收(“FETCH01_请求”);
试一试{
const response=wait axios.get('/api/members');
//成功
让成员=response.data.data;
收益率看跌期权(GET01行动(成员));
}捕获(错误){
//处理错误
console.log(错误);
}最后{
//总是执行
}
}
}