retryxをtryする

API Gateway + LambdaでAPIを作ると、でたまにLambdaが起動せずにリクエストがこけることがあります。 リトライ処理自作するのも手間なんでどうしたものかなぁと思っていたのですが、いい感じのライブラリ […]

広告ここから
広告ここまで

目次

    API Gateway + LambdaでAPIを作ると、でたまにLambdaが起動せずにリクエストがこけることがあります。
    リトライ処理自作するのも手間なんでどうしたものかなぁと思っていたのですが、いい感じのライブラリを教えてもらったので試してみます。
    Promise をリトライする何かを作った

    インストール

    $ yarn add retryx
    yarn add v0.18.1
    [1/4]   Resolving packages...
    [2/4]   Fetching packages...
    [3/4]   Linking dependencies...
    warning Unmet peer dependency "babel-core@^6.0.0 || ^7.0.0-alpha || ^7.0.0-beta || ^7.0.0".
    [4/4]   Building fresh packages...
    success Saved lockfile.
    success Saved 1 new dependency.
    └─ [email protected]
    ✨  Done in 16.30s.
    
    

    つかいかた

    簡潔に書くとretryx(Promiseやawaitする処理, リトライオプション)という書き方になります。

    「リトライオプションの内容に基づいて第一引数に書かれた処理を実行し、タイムアウトした場合などにリトライする」というイメージでしょうか。

    オプションも豊富で、ドキュメントには以下のように紹介されてます。

    {
      maxTries:       number,
      timeout:        number,
      waiter:         HookFunction,
      retryCondition: HookFunction,
      beforeTry:      HookFunction,
      afterTry:       HookFunction,
      beforeWait:     HookFunction,
      afterWait:      HookFunction,
      doFinally:      HookFunction,
    }
    

    README.mdにフローチャートQiitaに日本語紹介記事がそれぞれありますので詳細はそちらをみてください。

    node-wpapiで試す

    せっかくなので、ドキュメントに紹介されてないライブラリで試してみます。
    A WordPress REST API client for JavaScriptを使ってみました。

    import WPAPI from 'wpapi'
    import retryx from 'retryx'
    const endpoint = `https://example.com/wp-json`
    const wp = new WPAPI({ endpoint })
    
    export function listWPPosts () {
      return retryx(
        () => wp.posts(),
        {
          beforeTry: () => console.log('start'),
          afterTry: () => console.log('end'),
          maxTries: 3,
        }
      )
    }
    

    beforeTryafterTryでリクエスト前後に処理を追加することができます。
    Reduxなどですと、ここでactionを発火してfetch中であるという値をstoreに送り込むなどすると良さそうです。
    maxTriesを3に設定していますので、リクエストに失敗した場合は3回リトライしてくれます。

    とりあえずざっと触っただけなので今回はここまで。
    既存の処理からの変更も大して必要ないので、気軽に使えそうです。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark