Skip to content

Serialize a bunch of Promises according to a specific field

License

Notifications You must be signed in to change notification settings

davloperez/seriallency

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Seriallency

Serialize a bunch of Promises according to a specific field

Build Status Build Status Coverage

Demo example

View demo in JSFiddle.

With this module you can serialize multiple Promises by a specific key, so you can be sure that only a single promise for that key. Seriallency uses an internal dictionary to store promises if it already exists one previous Promise associated to the same key. For example:

You must execute 1 promise for User1, 2 promises for User2 and 3 promises for User3. All promises must be executed as fast as possible, BUT due to requirements, only ONE Promise for each user can be executing at once. With Seriallency you can achieve this easily, and get this execution order: seriallency_schema

Installation

npm install seriallency --save

Usage

Example 1: basic usage

import { Seriallency } from 'seriallency';

let seriallency = new Seriallency();

// USER1
seriallency.push({ serializeBy: 'user1', fn: hardWorkFn, params: ['user1', 1]});
// execute hardWorkFn('user1', 1) immediately

// USER2
seriallency.push({ serializeBy: 'user2', fn: hardWorkFn, params: ['user2', 1]});
// execute hardWorkFn('user2', 1) immediately
seriallency.push({ serializeBy: 'user2', fn: hardWorkFn, params: ['user2', 2]});
// queue hardWorkFn('user2', 2) to be executed when hardWorkFn('user2', 1) is resolved or rejected.

// USER3
seriallency.push({ serializeBy: 'user3', fn: hardWorkFn, params: ['user3', 1]});
// execute hardWorkFn('user3', 1) immediately
seriallency.push({ serializeBy: 'user3', fn: hardWorkFn, params: ['user3', 2]});
// queue hardWorkFn('user3', 2) to be executed when hardWorkFn('user3', 1) is resolved or rejected.
seriallency.push({ serializeBy: 'user3', fn: hardWorkFn, params: ['user3', 3]});
// queue hardWorkFn('user3', 3) to be executed when hardWorkFn('user3', 2) is resolved or rejected.

function hardWorkFn(userName: string, numParam: number): Promise<any>{
    console.log(`Executing hardWorkFn. userName:${userName}, numParam:${numParam}`);
    return new Promise(resolve => {
        // ... do some async process
        setImmediate(resolve);
    });
}

// Output is:
// Executing hardWorkFn. userName: user1, numParam: 1
// Executing hardWorkFn. userName: user2, numParam: 1
// Executing hardWorkFn. userName: user3, numParam: 1
// Executing hardWorkFn. userName: user2, numParam: 2
// Executing hardWorkFn. userName: user3, numParam: 2
// Executing hardWorkFn. userName: user3, numParam: 3

About

Serialize a bunch of Promises according to a specific field

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published