2.0.3 • Published 1 year ago

@debonet/es6pacts v2.0.3

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

es6pacts

Releasable, Reporting Promises for Javascript ES6

USAGE

This combines the releasable functionality of es6pledges with the reporting functionality of es6tasks.

Pacts can be used just like Promises, with the addition of the ability to release the pact from it's obligation, via resolve(), reject() or release() and to get progress reports via .progress()

Releasing a pledge results in the execution of a release function that can terminate the work, and settle the underlying Promise.

Progress reports stop when the pact is released, resolved, or rejected.

Example

function pactDelay( time, frequency = 100 ){
	let timeout;
	return new Pact(
		// this is a delay function which reports progress every frequency milliseconds
		( resolve, reject, report ) => {
			let timeSlept = 0;
			let f = () => {
				let r = time > 0 ? timeSlept / time : 0;
				report( timeSlept );
				if ( timeSlept < ( time - frequency )){
					timeSlept += frequency;
					timeout = setTimeout( f, frequency );
				}
				else if (timeSlept < time ){
					timeout = setTimeout( f, time - timeSlept );
					timeSlept = time;
				}
				else{
					resolve( time );
				}
			}
			f();
		},
	
		// this is a release function 
		() => {
			clearTimeout(timeout);
		}
	);
}


const pact = pactDelay( 10000, 100 )
	.progress(( x ) => console.log( "progress: ", x ));
	.then(( x ) => console.log( "result: ", x ));
	
setTimeout(() => { pact.resolve("faster"); }, 500);

Output:

progress: 0
progress: 100
progress: 200
progress: 300
progress: 400
result: faster

See Also

  • @debonet/es6pledges
  • @debonet/es6tasks
1.0.7

1 year ago

2.0.3

1 year ago

2.0.2

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

1.0.2

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago