Mediumに英語のエントリRetry POST request when it’s failed on React Nativeを書いた内容と同じですが、地下鉄で地下に潜るとreact-native-oauthのmakeRequest
が失敗するケースが発生しました。Twitterの2つ目の投稿が投げられていなかったり、FBへの投稿も落ちていました。そこで、リトライするコードを書きました。
Async Retryを使います。これはnode-retryをラップしたもので、例がシンプルで良さそうだったので使います。(async/awaitの文法にも慣れているので)
1 2 |
$ cd PROJECT_DIR $ yarn add async-retry # or npm install async-retry --save |
問題なくインストールできます。そして、コードは、下記のような感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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をうまく書けるのかな。。)
以上、リトライを実装したい方は参考にしてみてください。