dvaにおけるeffect内で別のeffectを呼び出すputブロック呼び出しを実現する方法


dvaにおけるeffect内で別のeffectを呼び出すputブロック呼び出しを実現する方法
プロジェクトでは通常、1つのeffectで別のeffectを呼び出す必要があります.実装方法はputを直接使用することです.
 *a({ payload}, {put, call,take}) {
      try {
      	  console.log(a)
          yield put({type: 'b',payload: {}});
          console.log(c)
          const info = yield call(serviceA, payload);
          put({
           type: 'save',
           payload: info,
          })
      }catch(e) {
      }
    },
    
 *b({ payload}, {put, call,take}) {
    yield call(serviceB, payload);
    console.log('b')
 }

しかしputはブロックされていない方法であり、putの使用効果は外部でdispatchを使用するのと同じであるため、上のコード出力順序はa,c,bであり、bが実行されてからaを実行するのを待つにはtaketakeがredux-sagaである方法はもちろんdvaにもあり、dispatchからのactionを一度に傍受するために使われている.さらにeffectの前後に/@@start/@@endのactionが追加的にトリガーされ、/@@endをリスニングしてeffectの実行終了をリスニングすることができます.コードは以下の通りです.
 *a({ payload}, {put, call,take}) {
      try {
      	  console.log(a)
          yield put({type: 'b',payload: {}}); //  b
          yield take('b/@@end') //     b       
          console.log(c)
          const info = yield call(serviceA, payload);
          put({
           type: 'save',
           payload: info,
          })
      }catch(e) {
      }
    },
    
 *b({ payload}, {put, call,take}) {
    yield call(serviceB, payload);
    console.log('b')
 }

このような閉塞の需要はよく見られるので、この方法は非常に有用である.
しかし、ここで疑問があるのは、callメソッドもeffectをトリガーできるようで、ドキュメントの中にはいくつかありますが、実際の使用ではcall内部にメソッドパラメータが伝達されなければならないので、何の問題なのか分かりません.callはもともとブロックメソッドで、callを直接使用できれば最高です.issuseは解決してほしいと提案しています.