Javascript-並列にネットワークにアクセスするpromiseの数を制御する方法

dmx

私のアプリケーションには、ネットワークに並行してアクセスする一連のPromiseがありますが、アプリがフルスピードで実行されていると、ネットワークにアクセスする多くのPromiseが原因でネットワークの速度が低下することがありますが、その方法を制御する方法を知りたいです。並行して多くのアクセスネットワーク。これはコードのサンプルです:

var ids = {1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 6: 56, 7: 7, 8: 8, 5:6 }; // this is random 
Promise.all( Object.keys(ids).map(function(dp){
  return new Promise(function(resolve, reject){

       http.post({url: addr, form: { data: dp }}, function(err, res, body){
        if (err){
            reject(err)
        }            
        resolve(body.xx);
      });

  });
})).then(function(data){
       http.post({url: hostAddress, form: { data: data.x }}, function(err, res, body){
        ......
        resolve(body.xx);
      });    
});
  });
}))

ネットワーキングはたくさんあります。同時に2つか3つしか許せなかったらいいのにと思います。ご協力いただきありがとうございます。

jfriend00

同時実行オプションがあるBluebird.map()を使用して、同時に実行中のリクエストの数を制御できます。

const Promise = require('bluebird');
const http = Promise.promisifyAll(require('http');

var ids = {1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 6: 56, 7: 7, 8: 8, 5:6 }; // this is random 

Promise.map(Object.keys(ids).map(function(dp){
    return  http.post({url: addr, form: { data: dp }).then(function(body) {
        return body.xx;
    });
}), {concurrency: 2}).then(function(results) {
    // process results here
});

http.post()参考までにdata.x、いつを参照するのdataが配列であるため、2番目で何をしようとしているのか理解できませんでしたこのコードは、その2番目で実際に何をしようとしていたかを説明するには少し多すぎる擬似コードだと思いますhttp.post()


それ以外の場合は、最初にN個のリクエストを起動し、1つが終了するたびに、もう実行する必要がなくなるまで別のリクエストを起動する独自の同時実行制御をコーディングできます。同時実行制御を手動でコーディングする例を次に示します。

一度に100件のリクエストを実行します

または、次のように自分で書くこともできます。

const http = require('http');

function httpPost(options) {
    return new Promise(function(resolve, reject) {
        http.post(options, function(err, res, body) {
            if (err) {
                reject(err);
            } else {
                resolve(body);
            }
        });
    });
}

// takes an array of items and a function that returns a promise
function mapConcurrent(items, maxConcurrent, fn) {
    let index = 0;
    let inFlightCntr = 0;
    let doneCntr = 0;
    let results = new Array(items.length);
    let stop = false;

    return new Promise(function(resolve, reject) {

        function runNext() {
            let i = index;
            ++inFlightCntr;
            fn(items[index], index++).then(function(val) {
                ++doneCntr;
                --inFlightCntr;
                results[i] = val;
                run();
            }, function(err) {
                // set flag so we don't launch any more requests
                stop = true;
                reject(err);
            });
        }

        function run() {
            // launch as many as we're allowed to
            while (!stop && inflightCntr < maxConcurrent && index < items.length) {
                runNext();
            }
            // if all are done, then resolve parent promise with results
            if (doneCntr === items.length) {
                resolve(results);
            }
        }

        run();
    });
}

var ids = {1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 6: 56, 7: 7, 8: 8, 5:6 }; // this is random 


mapConcurrent(Object.keys(ids), 2, function(item, index) {
    return httpPost({url: addr, form: {data: item}}).then(function(body) {
        return body.xxx;
    });
}).then(function(results) {
    // array of results here
}, function(err) {
    // error here    
});

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

async関数で二重ネスト配列内のデータにアクセスする方法-javascript?

分類Dev

javascript、promise、thenスコープ内で変数thisにアクセスする方法

分類Dev

javascriptのプライベート関数からパブリック関数にアクセスする方法

分類Dev

変数付きのJavaScriptを使用してオブジェクト配列にアクセスする方法

分類Dev

JavascriptでネットワークIDサブネットを取得するためにIPV6アドレスを分割する方法

分類Dev

相互にネストされたオブジェクトと配列をルックアップするJavaScript関数を作成する方法

分類Dev

Javascriptを使用してネストされたオブジェクトのJSON配列にアクセスする

分類Dev

ajaxリクエスト内のjavascript関数にアクセスする方法

分類Dev

javascriptで関数内の変数にアクセスする方法

分類Dev

jsonphp内の配列にjavascript / jqueryにアクセスする方法

分類Dev

javascriptの関数の外部で配列にアクセスする方法

分類Dev

JavaScriptでスクロールバーを制御する方法は?

分類Dev

インデックスの配列を使用して、Javascriptで任意の深さのネストされた配列にアクセスして変更する

分類Dev

javascriptフィルター関数でキーと値のペアの配列にアクセスする方法

分類Dev

関数とそのオブジェクトにアクセスできる JavaScript ラッパーを作成する方法は?

分類Dev

JavaScriptオブジェクト配列内のPHP変数にアクセスする方法

分類Dev

javascript:forEachを使用して配列内の次のインデックスにアクセスする方法は?

分類Dev

要素をjavascript関数に渡し、最初の子にアクセスする方法

分類Dev

C#でJavaScriptの変数にアクセスする方法

分類Dev

javascriptでコントローラー変数にアクセスする方法

分類Dev

Promiseから「this」の外部のJavaScriptにアクセスする

分類Dev

多次元Javascript配列の要素にアクセスする方法

分類Dev

javascriptで配列の値にアクセスする方法

分類Dev

javascriptのjsonからネストされた配列キー、値にアクセスする

分類Dev

プロトタイプパターンを明らかにするJavaScriptの変数にアクセスする

分類Dev

本文のスクロールを制御するようにJavascriptコードを調整する

分類Dev

JavaScriptにアラートボックスに負の値を返すように強制する方法はありますか?

分類Dev

Javascript:構築関数の「this」メンバーにアクセスする方法は?

分類Dev

JavaScript からデータ セットの各要素にアクセスする

Related 関連記事

  1. 1

    async関数で二重ネスト配列内のデータにアクセスする方法-javascript?

  2. 2

    javascript、promise、thenスコープ内で変数thisにアクセスする方法

  3. 3

    javascriptのプライベート関数からパブリック関数にアクセスする方法

  4. 4

    変数付きのJavaScriptを使用してオブジェクト配列にアクセスする方法

  5. 5

    JavascriptでネットワークIDサブネットを取得するためにIPV6アドレスを分割する方法

  6. 6

    相互にネストされたオブジェクトと配列をルックアップするJavaScript関数を作成する方法

  7. 7

    Javascriptを使用してネストされたオブジェクトのJSON配列にアクセスする

  8. 8

    ajaxリクエスト内のjavascript関数にアクセスする方法

  9. 9

    javascriptで関数内の変数にアクセスする方法

  10. 10

    jsonphp内の配列にjavascript / jqueryにアクセスする方法

  11. 11

    javascriptの関数の外部で配列にアクセスする方法

  12. 12

    JavaScriptでスクロールバーを制御する方法は?

  13. 13

    インデックスの配列を使用して、Javascriptで任意の深さのネストされた配列にアクセスして変更する

  14. 14

    javascriptフィルター関数でキーと値のペアの配列にアクセスする方法

  15. 15

    関数とそのオブジェクトにアクセスできる JavaScript ラッパーを作成する方法は?

  16. 16

    JavaScriptオブジェクト配列内のPHP変数にアクセスする方法

  17. 17

    javascript:forEachを使用して配列内の次のインデックスにアクセスする方法は?

  18. 18

    要素をjavascript関数に渡し、最初の子にアクセスする方法

  19. 19

    C#でJavaScriptの変数にアクセスする方法

  20. 20

    javascriptでコントローラー変数にアクセスする方法

  21. 21

    Promiseから「this」の外部のJavaScriptにアクセスする

  22. 22

    多次元Javascript配列の要素にアクセスする方法

  23. 23

    javascriptで配列の値にアクセスする方法

  24. 24

    javascriptのjsonからネストされた配列キー、値にアクセスする

  25. 25

    プロトタイプパターンを明らかにするJavaScriptの変数にアクセスする

  26. 26

    本文のスクロールを制御するようにJavascriptコードを調整する

  27. 27

    JavaScriptにアラートボックスに負の値を返すように強制する方法はありますか?

  28. 28

    Javascript:構築関数の「this」メンバーにアクセスする方法は?

  29. 29

    JavaScript からデータ セットの各要素にアクセスする

ホットタグ

アーカイブ