React-複数のAjax呼び出しを制御する

Lokesh Agrawal

私のreactアプリケーションには、グリッドがあります。ユーザーは一度に多数のグリッド行を選択し、ボタンをクリックして、選択したグリッド行に対して一括アクションを実行できます。

サーバー側では、バルクアクションをクリックするだけで、選択した行ごとに実行するスクリプトがあります(質問を簡単にするために、以下の例では、選択した行ごとに「jsonplaceholder.typicode.com」を呼び出しています)。ボタン。一括アクションボタンをクリックすると、アクションクリエーターでselectedRowsが取得されます。ここで、selectedRowsを繰り返し処理し、選択された各行に対してajax呼び出しを行います。

selectedRowsには1000を超えるアイテムが含まれている可能性があり、forEachループを使用してajax呼び出しを繰り返し行うと、各リクエストが解決される前にブラウザページが最終的に応答を停止する可能性があります。したがって、以下のソリューションを使用して、5つのバッチでリクエストを送信し、それらの5つが解決されるまで待ちます。

// Action creator, selectedRows is an array.
function onGridRowsSelection(selectedRows) {
   makeBatchCalls(selectedRows,5)
}

async function makeBatchCalls(selectedRows, length) {
    let test = arrayIds.reduce((rows, key, index) => (index % length == 0 
                ? rows.push([key]) 
                : rows[rows.length-1].push(key)) && rows, []);
    let Batchresults = []; //convert them to two dimensionl arrays of given length [[1,2,3,4,5], [6,7,8,9,10]]
    for (calls of test) {
            Batchresults.push(await Promise.all(calls.map((call)=>{
                fetch(`https://jsonplaceholder.typicode.com/posts/${call}`) 
                })
            ));
    }
return Promise.all(Batchresults); //wait for all batch calls to finish
}

上記の解決策は正常に機能しますが、1つの問題があります。

  1. グリッドから5行以上を選択し、一括アクションボタンをクリックします。
  2. もう一度5行以上を選択し、一括アクションボタンをクリックします。
  3. 現在、一度に10個のリクエストがアクティブになっています。

どうすればこれを制限できますか?

ここで言及されている問題のフォローアップの質問は、Reactで尋ねられます-複雑なアプリケーションで副作用なしに非同期呼び出しをスマートに制御する

この質問はJavaScript、Reactのフォローアップ質問です-複数の同時ajax呼び出しを送信します

デビッド・ニペ

asyncモジュールは、この機能を持っていますasync.queueまず、タスク関数を定義します。次に、それにタスクを与えます-あなたの場合、行の配列とそれが実行したいアクション。タスクが実行されるか、進行中のタスクがすでにある場合はキューに追加されます。タスクが完了すると、次のタスクがキューから取得されます。

さらに良いことに、1つの行に対してのみタスク関数を定義し、キューの同時実行性を5に設定できます。ユーザーがボタンをクリックすると、選択された行ごとに1つずつ、多数のタスクがキューに追加されます。5つのタスクがすぐに実行を開始し、残りはキューに入れられます。これはおそらくあなたがやろうとしていることよりも優れています。なぜなら、この方法でユーザーは2つのタスクを開始し、すぐに別の3つのタスクを開始でき、それらはすべて並行して実行されるからです。

次のコードを試してください。

const async = require('async');    // or whatever mechanism you're using for module management.

const queue = async.queue((row, callback) => {
    fetch(`https://jsonplaceholder.typicode.com/posts/${call}`)
        .then(callback, callback);
}, 5);

function onGridRowsSelection(selectedRows) {
    for (let call of selectedRows) {
        queue.push(call);
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JavaScript、React-複数の同時ajax呼び出しを送信する

分類Dev

react-nativeから複数のAPI呼び出しを送信する

分類Dev

React-複雑なアプリケーションで副作用なしに非同期呼び出しをスマートに制御する

分類Dev

RxJSで複数のajax呼び出しの圧力を制御する方法

分類Dev

React-サーバーに対して行われたAJAX呼び出しの制御

分類Dev

Reactの子で親関数呼び出しを処理する

分類Dev

Reactの関数を呼び出す

分類Dev

React / Jsxでレンダー内の複数の関数を呼び出す方法

分類Dev

Reactの複数のdivで同じ関数を呼び出す方法は?

分類Dev

React-複数のuseEffect / useCallback依存関係を更新しますが、Effectを1回だけ呼び出します

分類Dev

React-複数のuseEffect / useCallback依存関係を更新しますが、Effectを1回だけ呼び出します

分類Dev

React Redux Thunkは、1回の呼び出しで複数のアクションをトリガーします

分類Dev

React-Nativeのフェッチを使用してComponentDidMount内で複数のAPI呼び出しを実行するにはどうすればよいですか?

分類Dev

Reactでの複数のAPI呼び出し

分類Dev

React Hooks:複数の連続するsetState呼び出しでの再レンダリングをスキップします

分類Dev

フックを使用したReactコンポーネントの複数の呼び出し間で変更可能な状態を共有する

分類Dev

React Redux:複数の依存アクションを順番に呼び出す方法

分類Dev

Reactレンダリングの前に、複数の非同期呼び出しが終了するのを待ちます

分類Dev

複数のAPI呼び出しからデータを適切にフェッチし、ReactのDOMに表示する方法

分類Dev

Reactを使用してAPI呼び出しから複数のアイテムをレンダリングする方法

分類Dev

Reactチュートリアル-なぜこれをajax呼び出しでバインドするのか

分類Dev

Reactベースのダッシュボードからajax呼び出しを最適化する

分類Dev

react / js関数の呼び出し

分類Dev

ReactでFirebaseHTTPS呼び出し可能クラウド関数を呼び出す

分類Dev

React-API呼び出しの結果を元の関数に返します

分類Dev

Reactで関数を呼び出す

分類Dev

React-非同期API呼び出し、Promise.allは呼び出しが終了するのを待ちます

分類Dev

呼び出し関数React-NativeでtextInputsの値を保存します

分類Dev

React render()のmap()関数内で関数を呼び出す

Related 関連記事

  1. 1

    JavaScript、React-複数の同時ajax呼び出しを送信する

  2. 2

    react-nativeから複数のAPI呼び出しを送信する

  3. 3

    React-複雑なアプリケーションで副作用なしに非同期呼び出しをスマートに制御する

  4. 4

    RxJSで複数のajax呼び出しの圧力を制御する方法

  5. 5

    React-サーバーに対して行われたAJAX呼び出しの制御

  6. 6

    Reactの子で親関数呼び出しを処理する

  7. 7

    Reactの関数を呼び出す

  8. 8

    React / Jsxでレンダー内の複数の関数を呼び出す方法

  9. 9

    Reactの複数のdivで同じ関数を呼び出す方法は?

  10. 10

    React-複数のuseEffect / useCallback依存関係を更新しますが、Effectを1回だけ呼び出します

  11. 11

    React-複数のuseEffect / useCallback依存関係を更新しますが、Effectを1回だけ呼び出します

  12. 12

    React Redux Thunkは、1回の呼び出しで複数のアクションをトリガーします

  13. 13

    React-Nativeのフェッチを使用してComponentDidMount内で複数のAPI呼び出しを実行するにはどうすればよいですか?

  14. 14

    Reactでの複数のAPI呼び出し

  15. 15

    React Hooks:複数の連続するsetState呼び出しでの再レンダリングをスキップします

  16. 16

    フックを使用したReactコンポーネントの複数の呼び出し間で変更可能な状態を共有する

  17. 17

    React Redux:複数の依存アクションを順番に呼び出す方法

  18. 18

    Reactレンダリングの前に、複数の非同期呼び出しが終了するのを待ちます

  19. 19

    複数のAPI呼び出しからデータを適切にフェッチし、ReactのDOMに表示する方法

  20. 20

    Reactを使用してAPI呼び出しから複数のアイテムをレンダリングする方法

  21. 21

    Reactチュートリアル-なぜこれをajax呼び出しでバインドするのか

  22. 22

    Reactベースのダッシュボードからajax呼び出しを最適化する

  23. 23

    react / js関数の呼び出し

  24. 24

    ReactでFirebaseHTTPS呼び出し可能クラウド関数を呼び出す

  25. 25

    React-API呼び出しの結果を元の関数に返します

  26. 26

    Reactで関数を呼び出す

  27. 27

    React-非同期API呼び出し、Promise.allは呼び出しが終了するのを待ちます

  28. 28

    呼び出し関数React-NativeでtextInputsの値を保存します

  29. 29

    React render()のmap()関数内で関数を呼び出す

ホットタグ

アーカイブ