Skip to content

laptise/async-cache-manager

Repository files navigation

Async Cache Manager (日本語)

非同期処理の結果を簡単に最利用できるようにするライブラリ。

非同期処理の結果をキャッシュし、後続非同期処理にキャッシュした結果を最利用できるようにします。

指定した文字列のIDでタスクを生成し、同じ ID を持つタスク同士で同じ結果を利用します。

npm install async-cache-manager

※ ディープクローンが内部で実施されているので、参照を共有するわけではありません。

複数の同時リクエスト

以下では同じ HTTP リクエストを4回実行する例で説明をしていきます。

import AsyncCacheManager from "async-cache-manager";
const manager = new AsyncCacheManager(); //①

//②
manager.newTask("simple id", () => fetch("very-heavy-api"));
manager.newTask("simple id", () => fetch("very-heavy-api"));
manager.newTask("another id", () => fetch("very-heavy-api")); //③
manager.newTask("simple id", () => fetch("very-heavy-api"));

① マネージャー(仮称)のインスタンス化

すべての結果は、このマネージャーの中で結果が保持されます。

このインスタンスは何度も生成することができますが、異なるインスタンス間では結果が共有されません。

② タスクの実行

newTaskメソッドを利用し非同期実行を登録します。

第1引数は、タスクの識別idです。第2引数にはPromiseではなく、Promiseを返すコールバックを入れていることに注意してください。 これは、マネージャーがその処理を実行するかどうかを判断してから、実行できるようにする為です。

③ 結果物が共有されるのは同じ id のタスクのみ

③ の処理にはリクエスト対象は同じですが、another idという名前で id が設定されています。 同じidでしか結果物が共有されないので、③ のものは、独自に実行されることになります。

実行結果

一番目のsimple idのタスクが終了した時点で、同じ id を持つ残り3つのタスクが同時に解決します。

anothter idのタスクは上述の通り、再利用はされず、独自で実行され、独自で解決されます。

ロードマップ

今後のライブラリの開発ロードマップです。

データの保存場所系

現在はインスタンス内でメモリに保存しています。

これを、sessionStorage, localStorage, indexedDbにも保存できるようにします。

非同期処理の解決系

現在は一番最初に発行されたタスクの結果物を、後続タスクたちが共有します。

これを、一番最初に成功したリクエストの結果物を共有できるようにします。

エラー処理のヴァリエーション

現在は一番最初のタスクが失敗すると、後続タスクにも同じエラーが渡されます。

これを、失敗時に後続タスクの親を再設定し、リトライできるようにします。

About

Do not execute needless process. Cache the promise result once, reuse everytime with Async Cache Manager.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published