Dva: @ 0082谦setIntervalを使用してyield呼び出し(api、param)をポーリングする方法は、構文エラーを促します

作成日 2016年11月08日  ·  10コメント  ·  ソース: dvajs/dva

たとえば、setInterval(function(){yield call(api、param)}、1000)

question

最も参考になるコメント

const delay = timeout => {
  return new Promise(resolve => {
    setTimeout(resolve, timeout);
  });
};

全てのコメント10件

インターフェースをポーリングするにはどうすればよいですか。yieldを使用しないと、状態を操作できません。

while (true) {
  yield call(delay, 1000);
  yield call(api, params);
}

このような遅延を書き込むと、undefindがredux-sagaのユーティリティにあることが報告されます。それでは、dvaはどのように遅延を導入する必要がありますか?

const delay = timeout => {
  return new Promise(resolve => {
    setTimeout(resolve, timeout);
  });
};

私たちのプロジェクトは現在dvaでリファクタリングされていますが、この問題が発生しました、兄弟、ありがとう兄弟Qian

試してみました、うまくいきました、ありがとう

@sorryccページに、このポーリングを終了したい操作があります。どうすればよいですか?

こんにちは、
佐賀のエフェクト処理に関する詳細なチュートリアルはありますか?ポーリングの終了、再実行など、同じ問題が発生しました。簡単な方法はフラグで検出でき、cancel、fork、takeLatestもあります。学習する例をいくつか挙げていただけませんか。
ありがとうございました。

@sorryccもう一度お聞きしたいのですが、もしそうなら、特定のイベントがトリガーされたときにループを停止できるとしたらどうでしょうか?

redux-sagaのフォークを使用してタスクを生成し、必要に応じてタスクをキャンセルする必要があります。

    * forkInterval(actions, { fork, cancelled, put }) {
      globalInterval = yield fork(function* () {
        try {
          while (true) {
            yield delay(3000);
            yield put({ type: 'youraction'  });
          }
        } finally {
          if (yield cancelled()) {
            // 取消之后的操作,这里什么都不做
          }
        }
      });
    },

    * clearInterval(actions, { cancel }) {
      yield cancel(globalInterval);
    },
このページは役に立ちましたか?
0 / 5 - 0 評価