2017-10-04 18 views
1

私は、ENDエフェクト(詳細はhttps://github.com/redux-saga/redux-saga/issues/255の詳細、なぜこれが難しいのか説明します)を介してサーバーサイドレンダリングにアプリケーションを取得しようとしています。redux-saga - 別のサーバーに依存する1非同期のサーバーサイドレンダリング

私のデータは、2つの非同期要求(getJwtToken -> (with token data) FetchItem -> now render)に依存しています。

これはまったく可能ですか?

私はチャネル(ここではhttps://redux-saga.js.org/docs/advanced/Channels.html)を見るのに時間を費やしていて、動作するように変更することはできませんでした。

私の佐賀はこのような何か(LOAD_USER_PAGEが最初に発射される)

function* loadUserPage() { 
    yield put({type: 'JWT_REQUEST'}) 
    const { response } = yield call(fetchJwtToken) 
    if (response) { 
    yield put({type: 'JWT_REQUEST_SUCCESS', payload: response}) 
    } 
} 

function* fetchItem() { 
    console.log('NEVER GETS HERE') 
} 

function* watchLoadPage() { 
    yield takeLatest('LOAD_USER_PAGE', loadUserPage); 
} 

function* watchFetchItem() { 
    yield takeLatest('JWT_REQUEST_SUCCESS', fetchItem); 
} 

export default function* rootSaga() { 
    yield all([ 
    fork(watchLoadPage) 
    fork(watchFetchItem) 
    ]) 
} 

に見える私は(それが動作しない理由を私は理解して信じているため、ENDイベントに開始しているだけでこれらの効果を終了解雇、そして私から第二の効果私の最初が戻るまで、それはrunSaga().done約束には含まれていない解雇されることはありません。

私はアクションJWT_REQUEST_SUCCESSを意味する動作しないことでは解雇とrunSaga.done約束が実行されます。しかしにconsole.logの私のメッセージがあるさ解雇されません。

私は同じ機能の両方の要求を持つことによって可能だと思うが、私はトークンの認証部分を抽象化しようとしています。

どうしてですか?

本当にスタックされています。

+0

このコードを実行するとどうなりますか? 「それはうまくいかない」よりも詳細な情報が役に立ちます。 – stone

+0

@skypecakesごめんなさい+更新を精緻化します。 したがって、 'JWT_REQUEST_SUCCESS'アクションが起動され、' runSaga.done'約束が実行されます。 しかし、 'console.log'の私のメッセージは起動されません。 私は同じ機能で両方のリクエストを持つことによって可能だと思いますが、私はトークンの認証部分を抽象化しようとしています。私はそれが理にかなってほしい –

答えて

関連する問題