[React Native] HTTP requestのRetryを実装する

Mediumに英語のエントリRetry POST request when it’s failed on React Nativeを書いた内容と同じですが、地下鉄で地下に潜るとreact-native-oauthmakeRequestが失敗するケースが発生しました。Twitterの2つ目の投稿が投げられていなかったり、FBへの投稿も落ちていました。そこで、リトライするコードを書きました。

Async Retryを使います。これはnode-retryをラップしたもので、例がシンプルで良さそうだったので使います。(async/awaitの文法にも慣れているので)

 $ cd PROJECT_DIR
 $ yarn add async-retry # or npm install async-retry --save

問題なくインストールできます。そして、コードは、下記のような感じ。

import retry from 'async-retry'

...

  async _tweetWithRetry(text){
    return await retry(async () => {
      let encodedText = encodeURIComponent(text);
      const endpoint = `https://api.twitter.com/1.1/statuses/update.json?status=${encodedText}`;
      const res = await manager.makeRequest('twitter', endpoint, { method: 'post' });
      return res;
    }, {
      retries: 5
    });
  },

2つ目の引数にnode-retryのオプションを書いてくイメージです。今回はエラーハンドリングは特にしないで5回リトライする単純なコードです。iphoneのデベロッパーのところにある”Very bad network”で試したところ、コンソールに数回トライしているのを確認しました。(Testをうまく書けるのかな。。)

以上、リトライを実装したい方は参考にしてみてください。

Related Posts