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(错误);
}最后{
//总是执行
}
}
}