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,
}
)
}
beforeTry
とafterTry
でリクエスト前後に処理を追加することができます。
Reduxなどですと、ここでactionを発火してfetch中であるという値をstoreに送り込むなどすると良さそうです。
maxTries
を3に設定していますので、リクエストに失敗した場合は3回リトライしてくれます。
とりあえずざっと触っただけなので今回はここまで。
既存の処理からの変更も大して必要ないので、気軽に使えそうです。