2017-06-01 4 views
1

私のアプリではサードパーティのライブラリからメソッドを呼び出すワーカーがいます。サードパーティライブラリは支払いサービス(Zuora)であり、メソッドはiframeフォームを初期化し、コンポーネント内でレンダリングします。サードパーティのライブラリメソッドには、iframeフォームの送信時に呼び出されるコールバック関数が必要です。ここでサードパーティのコールバックによるアクションのディスパッチ

は、佐賀の簡略図です:

function* render(action) { 
    try { 
    const callback = function(response) { 
     if (response.success) { 
     // DISPATCH ACTION HERE 
     } 
    } 

    ZUORALIBRARY.render(callback); 
    yield put({...action, type: RENDER_SUCCESS}); 

    } catch (e) { 
    yield put({...action, type: RENDER_FAIL, errors: e}); 
    } 
} 

私は、コールバック内のアクションを派遣したいと思いますが、それが動作することに何の運を持っていませんでした。これには、コールバック関数をジェネレータにして、yield/putを使用することが含まれています。私はこのアプローチが反パターンかもしれないことも読んだ。

これを処理する別の方法がありますか?

+0

ようなものをやって、私はこの方法では、それらとの対話の 'middleware'責任を作成する傾向がある私それらの第三者のロジックからアプリケーションのロジックを分離することができます。ですから、理想的には、あなたが 'dispatch'関数へのアクセスを考慮して、ミドルウェアからあなたのアクションをディスパッチすることができます。 – Ematipico

+0

すごい、あなたが私に指すことができるリソースがありますか? –

+0

私は公式のドキュメンテーション[ここ](http://redux.js.org/docs/advanced/Middleware.html#seven-examples)を個人的に開始しました。それは本当に簡単です!その後、私は自分の個人的な変更を始めました。ミドルウェアについてもっと理解したい場合は、ページ全体を読むことができます – Ematipico

答えて

0

私はなどロガー、分析、などサードパーティのライブラリを処理する必要がある場合、この

import { call, put } from "redux-saga/effects"; 

function renderIframe() { 
    return new Promise((resolve, reject) => { 
    ZUORALIBRARY.render(response => { 
     if (response.success) { 
     resolve(response); 
     } else { 
     reject(); 
     } 
    }); 
    }); 
} 

function* render(action) { 
    try { 
    const result = yield call(renderIframe); 
    yield put({ ...action, type: RENDER_SUCCESS }); 
    } catch (e) { 
    yield put({ ...action, type: RENDER_FAIL, errors: e }); 
    } 
} 
関連する問題