Angular9のサービスでHTTPPOSTを再帰的に呼び出すことはできますか?

雪片74

データ(バッチ)を外部APIに投稿する必要があり、バッチはリクエストごとに5アカウントを超えることはできません。そのため、コードを使用して配列を以下のように小さなチャンクにチャンクし、ループでhttpサービスを呼び出してチャンクされたデータを渡しました。

しかし、問題は、バックエンドのAPIが同時に実行されることです。Angularで最初の呼び出しを待ってから、サービスへの次の呼び出しを開始する方法がわかりません。ループの最後に到達するまで続きます。

chunk(arr, chunkSize) {
if (chunkSize <= 0) throw "Invalid chunk size";
var R = [];
for (var i=0,len=arr.length; i<len; i+=chunkSize)
  R.push(arr.slice(i,i+chunkSize));
return R;
}



submitReport():void{

//uniquechildids =[1,2,3,4,5,6,7,8,9,10];
//break into small chunks
const chunkedAccounts = this.chunk(uniquechildids,5);
//output [1,2,3,4,5] [6,7,8,9,10]

let i = 0;
//loop through the chunked array and create params
for(let account of chunkedAccounts ) {
   const rParam = new ReportParamsModel();
   rParam.childIds = account;
   
   //call the backend service that calls the api in C#
   this.reportService.submitReport(rParam).subscribe(result => {
      if(result.statuscode == 200){
      //do some stuff here
      }
      this.loadingMessage = `Submitted batch ${i} of ${chunkedAccounts .length}`;
   },
   error=>{
   console.log(error);
   });
 i++;
}

バックエンドAPIは、2回、またはchunkedAccountの長さが何であれ同時にヒットしています。

トーマスサブリック

async / awaitを使用して、各呼び出しを待つことができます。

chunk(arr, chunkSize) {
  if (chunkSize <= 0) throw "Invalid chunk size";
  const R = [];
  for (let i = 0, len = arr.length; i < len; i += chunkSize)
    R.push(arr.slice(i, i + chunkSize));
  return R;
}

async submitReport(): Promise<void> {

  //uniquechildids =[1,2,3,4,5,6,7,8,9,10];
  //break into small chunks
  const chunkedAccounts = this.chunk(uniquechildids,5);
  //output [1,2,3,4,5] [6,7,8,9,10]

  let i = 0;
  //loop through the chunked array and create params
  for(let account of chunkedAccounts) {
    const rParam = new ReportParamsModel();
    rParam.childIds = account;
  
    //call the backend service that calls the api in C#
    try {
      const result = await this.reportService.submitReport(rParam).toPromise();
      if(result.statuscode === 200){
        //do some stuff here
      }
      this.loadingMessage = `Submitted batch ${i} of ${chunkedAccounts .length}`;
    } catch (error) {
      console.log(error);
    }
    i++;
  }
}

これが短い例です:

async function f(i) {
    console.log('Starting: ' + i);
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log('Finished: ' + i);
            if (i > 3) reject('Error: i > 3');
            resolve();
        }, 1000);
    });
}

async function submitReport() {
  const chunkedAccounts = [1, 2, 3, 4]

  for(let account of chunkedAccounts) {
    try {
      await f(account);
    } catch (error) {
      console.log(error);
    }
  }
}

submitReport();

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

COBOLでは、段落を再帰的に呼び出すことはできますか?

分類Dev

BlazorサービスでNavigationManagerを呼び出すことはできますか

分類Dev

Perl:サブルーチンAを再帰的に呼び出すことができるのに、以前のAから呼び出されたBからAを呼び出すことができないのはなぜですか?

分類Dev

スタックをオーバーフローさせることなく、非同期関数を再帰的に呼び出すことはできますか?

分類Dev

定期的に呼び出すサービスへの再帰呼び出しをコーディングするにはどうすればよいですか?

分類Dev

jqueryで関数を再帰的に呼び出すことができないのはなぜですか?

分類Dev

jqueryで関数を再帰的に呼び出すことができないのはなぜですか?

分類Dev

ラムダ関数はそれ自体をPythonで再帰的に呼び出すことができますか?

分類Dev

Spring Bootのサービスからカスタムバリデーターを明示的に呼び出すことはできますか?

分類Dev

再帰は何回呼び出すことができますか?

分類Dev

関数型js-独自の関数を再帰的に呼び出すことはできません

分類Dev

2回目にAngularサービスを呼び出すことができません

分類Dev

Workdayは外部Webサービスを呼び出すことができますか?

分類Dev

bash関数がローカル変数を使用せずに自分自身を再帰的に呼び出すことができるのはなぜですか?

分類Dev

この再帰関数を修正して、呼び出しが深くならないようにすることはできますか?

分類Dev

このnameof()は本当に再帰的な呼び出しですか?

分類Dev

SpringRestControllerでRESTサービスを呼び出すことができません

分類Dev

@Repository内でサービスを呼び出すことは可能ですか?

分類Dev

Angular9のngFor内で関数を呼び出すとコンテキストが失われます

分類Dev

サービスからデータを取得するためにAjax呼び出しを呼び出すことができません

分類Dev

Angular9がHammerGestureConfig.buildHammerを呼び出すことはありません

分類Dev

apache kafkaコンシューマーのSpringBoot Rest APIアプリからサービスメソッドを呼び出すことはできますか?

分類Dev

Objective Cの「POST」のAppdelegateメソッドからJSON解析などのWebサービスを呼び出すことはできますか?

分類Dev

このWebサービスを呼び出すときに404エラーが発生するのはなぜですか?

分類Dev

ajaxによって送信されたすべての要求(xmlhttprequest)をWebサービス要求として呼び出すことができますか?

分類Dev

関数呼び出しを返すことと、再帰中に関数を再度呼び出すことだけの違いは何ですか?

分類Dev

エンドポイントはクラウド上で複数のバックエンドサービスを呼び出すことができますか

分類Dev

Responseのエンドイベント内からHttp.Requestを再帰的に呼び出すことはできません

分類Dev

docker関数はsudoを使用するときに自分自身を再帰的に呼び出さないのですか?

Related 関連記事

  1. 1

    COBOLでは、段落を再帰的に呼び出すことはできますか?

  2. 2

    BlazorサービスでNavigationManagerを呼び出すことはできますか

  3. 3

    Perl:サブルーチンAを再帰的に呼び出すことができるのに、以前のAから呼び出されたBからAを呼び出すことができないのはなぜですか?

  4. 4

    スタックをオーバーフローさせることなく、非同期関数を再帰的に呼び出すことはできますか?

  5. 5

    定期的に呼び出すサービスへの再帰呼び出しをコーディングするにはどうすればよいですか?

  6. 6

    jqueryで関数を再帰的に呼び出すことができないのはなぜですか?

  7. 7

    jqueryで関数を再帰的に呼び出すことができないのはなぜですか?

  8. 8

    ラムダ関数はそれ自体をPythonで再帰的に呼び出すことができますか?

  9. 9

    Spring Bootのサービスからカスタムバリデーターを明示的に呼び出すことはできますか?

  10. 10

    再帰は何回呼び出すことができますか?

  11. 11

    関数型js-独自の関数を再帰的に呼び出すことはできません

  12. 12

    2回目にAngularサービスを呼び出すことができません

  13. 13

    Workdayは外部Webサービスを呼び出すことができますか?

  14. 14

    bash関数がローカル変数を使用せずに自分自身を再帰的に呼び出すことができるのはなぜですか?

  15. 15

    この再帰関数を修正して、呼び出しが深くならないようにすることはできますか?

  16. 16

    このnameof()は本当に再帰的な呼び出しですか?

  17. 17

    SpringRestControllerでRESTサービスを呼び出すことができません

  18. 18

    @Repository内でサービスを呼び出すことは可能ですか?

  19. 19

    Angular9のngFor内で関数を呼び出すとコンテキストが失われます

  20. 20

    サービスからデータを取得するためにAjax呼び出しを呼び出すことができません

  21. 21

    Angular9がHammerGestureConfig.buildHammerを呼び出すことはありません

  22. 22

    apache kafkaコンシューマーのSpringBoot Rest APIアプリからサービスメソッドを呼び出すことはできますか?

  23. 23

    Objective Cの「POST」のAppdelegateメソッドからJSON解析などのWebサービスを呼び出すことはできますか?

  24. 24

    このWebサービスを呼び出すときに404エラーが発生するのはなぜですか?

  25. 25

    ajaxによって送信されたすべての要求(xmlhttprequest)をWebサービス要求として呼び出すことができますか?

  26. 26

    関数呼び出しを返すことと、再帰中に関数を再度呼び出すことだけの違いは何ですか?

  27. 27

    エンドポイントはクラウド上で複数のバックエンドサービスを呼び出すことができますか

  28. 28

    Responseのエンドイベント内からHttp.Requestを再帰的に呼び出すことはできません

  29. 29

    docker関数はsudoを使用するときに自分自身を再帰的に呼び出さないのですか?

ホットタグ

アーカイブ