retry vs promise-retry vs exponential-backoff vs async-retry vs backoff
"再試行ライブラリ" npm パッケージ比較
1 年
retrypromise-retryexponential-backoffasync-retrybackoff類似パッケージ:
再試行ライブラリとは?

再試行ライブラリは、失敗した操作(例:ネットワークリクエストやデータベースクエリ)を自動的に再試行するためのツールです。これらのライブラリは、エラーが発生した場合に指定された回数だけ操作を再試行し、成功するまで待機時間を設けることができます。これにより、一時的な障害やネットワークの問題に対処し、アプリケーションの信頼性を向上させることができます。async-retryは、非同期関数の再試行を簡単に行えるライブラリで、カスタマイズ可能な待機時間や再試行回数を設定できます。backoffは、再試行の待機時間を指数関数的に増加させることができるライブラリで、特にネットワークエラーに効果的です。exponential-backoffは、再試行の待機時間を指数関数的に増加させるシンプルなライブラリで、特定のエラーコードに基づいて再試行を制御できます。promise-retryは、Promiseベースの関数を再試行するためのライブラリで、成功するまで再試行し、カスタマイズ可能な待機時間を設定できます。retryは、コールバックベースの関数を再試行するためのライブラリで、エラーが発生した場合に指定された回数だけ再試行します。

npmのダウンロードトレンド
GitHub Starsランキング
統計詳細
パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
retry44,990,5111,250-194年前MIT
promise-retry16,978,789317-115年前MIT
exponential-backoff12,814,45237855.2 kB63ヶ月前Apache-2.0
async-retry10,086,4041,878-304年前MIT
backoff795,834337-119年前MIT
機能比較: retry vs promise-retry vs exponential-backoff vs async-retry vs backoff

再試行メカニズム

  • retry:

    retryは、コールバックベースの関数を再試行します。エラーが発生した場合に指定された回数だけ再試行します。

  • promise-retry:

    promise-retryは、Promiseベースの関数を再試行します。関数が成功するまで再試行し、待機時間をカスタマイズできます。

  • exponential-backoff:

    exponential-backoffは、再試行の待機時間をシンプルに指数関数的に増加させます。特定のエラーコードに基づいて再試行を制御することもできます。

  • async-retry:

    async-retryは、非同期関数の再試行を行います。Promiseが拒否された場合に再試行し、成功するまで続けます。

  • backoff:

    backoffは、再試行の待機時間を指数関数的に増加させることができます。これにより、再試行が繰り返されるたびに待機時間が長くなります。

待機時間のカスタマイズ

  • retry:

    retryでは、待機時間をカスタマイズする機能はありません。

  • promise-retry:

    promise-retryでは、待機時間をカスタマイズするための関数を指定できます。これにより、再試行ごとに異なる待機時間を設定できます。

  • exponential-backoff:

    exponential-backoffでは、待機時間の増加率をカスタマイズできますが、シンプルな設計のため、複雑なカスタマイズは難しいです。

  • async-retry:

    async-retryでは、待機時間をカスタマイズするための関数を指定できます。これにより、再試行の間に任意の待機時間を設定できます。

  • backoff:

    backoffでは、待機時間を指数関数的に増加させることができますが、カスタマイズは限られています。

エラー処理

  • retry:

    retryは、エラーが発生した場合に再試行を行います。エラー処理のカスタマイズは限られています。

  • promise-retry:

    promise-retryは、再試行中に発生したエラーを処理します。エラーが発生した場合に再試行を行い、成功するまで続けます。

  • exponential-backoff:

    exponential-backoffは、特定のエラーコードに基づいて再試行を制御することができます。これにより、特定のエラーに対して再試行を行わないように設定できます。

  • async-retry:

    async-retryは、再試行中に発生したエラーをキャッチし、再試行を続けます。すべてのエラーを処理するため、特定のエラーに対するカスタム処理は難しいです。

  • backoff:

    backoffは、再試行中に発生したエラーを処理しますが、特定のエラーに基づいて再試行を制御する機能はありません。

シンプルさと使いやすさ

  • retry:

    retryは、コールバックベースの関数を再試行するためのシンプルなライブラリで、使いやすいです。

  • promise-retry:

    promise-retryは、Promiseベースの関数を再試行するためのシンプルなAPIを提供しています。

  • exponential-backoff:

    exponential-backoffは、シンプルな設計で使いやすく、特に指数関数的再試行が必要な場合に適しています。

  • async-retry:

    async-retryは、シンプルなAPIで使いやすく、非同期関数の再試行を簡単に実装できます。

  • backoff:

    backoffは、再試行の待機時間を指数関数的に増加させる機能があり、使いやすいですが、カスタマイズは限られています。

Ease of Use: Code Examples

  • retry:

    コールバックベースの再試行

    const retry = require('retry');
    
    const operation = retry.operation({
      retries: 5, // 最大再試行回数
      factor: 2, // 待機時間の増加率
      minTimeout: 1000, // 最小待機時間
      maxTimeout: 5000, // 最大待機時間
    });
    
    operation.attempt((currentAttempt) => {
      console.log(`試行 ${currentAttempt}`);
      // 失敗する可能性のある操作
      const success = false; // 成功/失敗のシミュレーション
      if (success) {
        operation.succeed(); // 成功
      } else {
        operation.retry(new Error('失敗')); // 失敗して再試行
      }
    });
    
  • promise-retry:

    Promiseベースの再試行

    const promiseRetry = require('promise-retry');
    
    function fetchWithRetry() {
      return promiseRetry((retry, number) => {
        console.log(`試行 ${number}`);
        return fetch('https://example.com').catch(retry); // エラーが発生したら再試行
      }, {
        retries: 5, // 最大再試行回数
        minTimeout: 1000, // 最小待機時間
        maxTimeout: 5000, // 最大待機時間
      });
    });
    
  • exponential-backoff:

    シンプルな指数関数的再試行

    const { exponentialBackoff } = require('exponential-backoff');
    
    async function retryOperation() {
      // 失敗する可能性のある操作
    }
    
    await exponentialBackoff(retryOperation, {
      retries: 5, // 最大再試行回数
      initialDelay: 1000, // 初期待機時間
      multiplier: 2, // 待機時間の増加率
    });
    
  • async-retry:

    非同期関数の再試行

    const retry = require('async-retry');
    
    async function fetchData() {
      // 失敗する可能性のある非同期操作
    }
    
    await retry(async (bail) => {
      const result = await fetchData();
      if (!result) bail(new Error('データが取得できませんでした')); // 再試行せずにエラーを返す
      return result;
    }, {
      retries: 5, // 最大再試行回数
      minTimeout: 1000, // 最小待機時間
      maxTimeout: 5000, // 最大待機時間
    });
    
  • backoff:

    指数関数的再試行

    const { backoff } = require('backoff');
    
    const operation = backoff.call(() => {
      // 失敗する可能性のある操作
    });
    
    operation.failAfter(5); // 最大失敗回数
    operation.setStrategy(new backoff.ExponentialStrategy()); // 指数関数的戦略
    operation.start();
    
選び方: retry vs promise-retry vs exponential-backoff vs async-retry vs backoff
  • retry:

    コールバックベースの関数を再試行したい場合は、retryを選択してください。シンプルなAPIで、指定された回数だけ再試行します。

  • promise-retry:

    Promiseベースの関数を再試行し、成功するまで待機したい場合は、promise-retryを選択してください。待機時間をカスタマイズできるため、柔軟性があります。

  • exponential-backoff:

    シンプルな指数関数的再試行が必要で、特定のエラーコードに基づいて再試行を制御したい場合は、exponential-backoffを選択してください。

  • async-retry:

    非同期関数の再試行が必要で、待機時間や再試行回数を柔軟に設定したい場合は、async-retryを選択してください。特に、Promiseを返す関数に対して簡単に使用できます。

  • backoff:

    再試行の待機時間を指数関数的に増加させたい場合は、backoffを選択してください。ネットワークエラーや一時的な障害に対処するのに適しています。