2016-11-11 13 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

ありpostEntityresponseまたはtrue/falseのような値を返します。次に、postLoginでその値をチェックします。あなたはpostEntityに行ったよう

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

それに応じてresultの値と火災の成功/失敗イベントを確認してください。

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

あなたは 'postEntity'コードがどのようにそれを返すのか教えていただけますか?私は試しましたが、何かを返すようには思えません。 – aericson

+0

ちょうど返信応答 –

+0

ああ、私の問題はジェネレータを正しく理解していたと思います。ありがとう! – aericson

関連する問題