npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

async-cache-manager

v1.0.0

Published

Cache the promise result.

Downloads

3

Readme

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にも保存できるようにします。

非同期処理の解決系

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

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

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

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

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