2016-11-11 77 views
0

我正在使用可重用的生成器函数来调用REQUEST/SUCCESS/FAILURE操作。然后我有另一个生成器来调用该函数,但我想获得某种反馈并提出另一个操作。不知道如何解释它,这里是我想要做的一个例子:Redux-saga使用可重复使用的生成器调度多个操作

/* in actions/index.js */ 
export const login = { 
    request:() => action(constants.LOGIN.REQUEST), 
    success: (response) => { 
    try { 
     jwtDecode(response.auth_token); 
    } catch (e) { 
     return action(constants.LOGIN.FAILURE, 
     { payload: { error: { 
      status: 403, 
      statusText: 'Invalid token', 
     } } }); 
    } 
    return action(constants.LOGIN.SUCCESS, { payload: { response } }); 
    }, 
    failure: error => action(constants.LOGIN.FAILURE, { payload: { error } }), 
}; 

/* sagas/index.js */ 
function* postEntity(entity, apiFn, body) { 
    yield put(entity.request()); 
    const { response, error } = yield apply(null, apiFn, body); 
    if (response) { 
    yield put(entity.success(response)); 
    } else { 
    yield put(entity.failure(error)); 
    } 
} 

function* postLogin(action) { 
    yield postEntity(login, api.login, [action.payload.email, action.payload.password]); 
    // How can I get some kind of feedback (succeed or not) from postEntity here and do a put(something_else) if succeeded? 
} 

export default function* rootSaga() { 
    yield takeLatest(constants.LOGIN_USER, postLogin); 
} 

任何反馈是非常感谢。

谢谢!

回答

0

postEntity返回值如response或true/false。然后在postLogin检查该值。

const result = yield postEntity(login, api.login, [action.payload.email, action.payload.password]); 

然后检查的result和消防成功/失败事件,因此就像你在postEntity做的值。

if(result) {yield put(successCreator())} else { ...} 
+0

你能告诉我'postEntity'代码怎么会返回它吗?我试过了,但我似乎无法让它返回一些东西。 – aericson

+0

只需返回回复 –

+0

哦,猜我的问题是正确理解生成器。谢谢! – aericson

相关问题