This package has been deprecated

Author message:

use promise-context

PromiseContext

0.0.1 • Public • Published

PromiseContext

Build Status

PromiseContext gives a useful asynchronous executing context.

  • easy chaining of executors
  • optional completion routine
  • deferred subroutine call
  • subroutine can be looped
  • break/continue a loop
  • labelled break/continue

practical usages can be found in FileOutputStream ...

Basic

Let A be a example executor below.

function A(resolve, reject){
	console.log("in A");
	setTimeout(function(){
		resolve();
		console.log("out A");
	}
	, 100); // 100ms
}

Let B,C are executors similar to A. In order to execute these executors in a row, do the following:

var ctx = new PromiseContext();
ctx.chain(A);
ctx.chain(B);
ctx.chain(C);
ctx.end();

A is called asynchronously after ctx.end(). B is called after A is resolved. C is called after B is resolved.

As a result of this example, following sequence will be printed on console:

in A
out A
in B
out B
in C
out C

Following code is equivalent to the above code.

new PromiseContext().chain(A).chain(B).chain(C).end();

Catching an error or a rejection

This is a same manner as Promise.

ctx.chain(A);
ctx.catch(function(err){
	// if A called 'reject(err)' instead of 'resolve()', 
	// 'err' would hold the value rejected in A.
});

Completion

Completion routines can be set as follows:

ctx.setCompletion(onFulfilled, onRejected);

One of completion routines will be called after all the executors resolved.

Call subroutines

var ctx = new PromiseContext();
ctx.chain(A);
ctx.call(function sub(){
	ctx.chain(B);
	ctx.chain(C);
});
ctx.chain(D);
ctx.end();

This example obtains a similar results to chaining A,B,C,D, but the function 'sub' is called asynchronously after A is resolved.

Loop subroutine

var i=0;
ctx.loop(function (){
	ctx.chain(A);
	ctx.chain(B);
	if (++i == 5) ctx.break();
});

Break a loop outside

ctx.loop(function (){
	ctx.chain(A);
	ctx.catch(function (err){
		ctx.chain(B);
		ctx.break();
	});
});
ctx.loop('L1', function (){
	ctx.chain(A);
	var i=0;
	ctx.loop(function (){
		ctx.chain(B);
		ctx.catch(function (err){
			ctx.break('L1');
		});
		if (++i == 5) ctx.break();
	});
});

Continue a loop

ctx.loop(function (){
	ctx.chain(A);
	ctx.catch(function (err){
		ctx.chain(B);
		ctx.continue();
	});
	ctx.chain(C);
});

Package Sidebar

Install

npm i PromiseContext

Weekly Downloads

2

Version

0.0.1

License

BSD-3-Clause

Last publish

Collaborators

  • kotarondo