Mediumに英語のエントリRetry POST request when it’s failed on React Nativeを書いた内容と同じですが、地下鉄で地下に潜るとreact-native-oauthのmakeRequest
が失敗するケースが発生しました。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をうまく書けるのかな。。)
以上、リトライを実装したい方は参考にしてみてください。