The Wayback Machine - https://web.archive.org/web/20201002190231/https://github.com/ulrikstrid/bs-dataloader
Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 

README.md

bs-dataloader

CircleCI

This is a rewrite of dataloader js lib in reasonml for use with BuckleScript. I have a goal to make it work with native OCaml in the future but I still rely on some JavaScript structures.

Usage

module UserLoaderImpl = {
  type value = user;
  type key = userId;

  /* The batchLoadFun needs to wrap the returned values in Js.Result.t so that we can reject each promise instead of all */
  let batchLoadFun = userIds => batchGetUsers(userIds);
  let options: options = {batch: true, maxBatchSize: 256, cache: true};
};

module UserLoader = DataLoader.Make(UserLoaderImpl);

UserLoader.load("1")
|> Js.Promise.then_(
  user => {
    displayUser user;
    Js.Promise.resolve ();
  }
);

/* elsewhere in your app */

UserLoader.load("2")
|> Js.Promise.then_(
  user => {
    interactWithUser user;
    Js.Promsie.resolve();
  }
);

The example above will load both users at the same time with 1 request. If we later need one of the loaded users again we will get a cached version of the promise, if you need a new version from the server you can clear the key.

updateUser(~userId, ~userPatch)
|> Js.Promise.then_(_ => Js.Promise.resolve(UserLoader.clear userId))
|> Js.Promise.then_(_ => UserLoader.load("1"))
|> Js.Promise.then_(user => {
  displayUser user;
  Js.Promise.resolve ();
});

Development

Build

npm run build

Build + Watch

npm run watch

Test

npm run test

Editor

If you use vscode, Press Windows + Shift + B it will build automatically

About

Small lib to batch and cache loading of async data, bring your own fetch implementation

Resources

License

Releases

No releases published

Packages

No packages published

Languages

You can’t perform that action at this time.