attempt-js
v0.4.0
Published
Utility objects to represent and interact with asynchronous operations.
Downloads
10
Readme
Attempt
Utility objects to represent and interact with asynchronous operations.
Install and use in Node
- Add the dependency:
npm install attempt-js --save
- Import in your code and create new objects:
var Attempt = require( "attempt-js" ); var myAttempt = new Attempt( /* ... */ ); // Note that 'new' is facultative! var myOtherAttempt = Attempt( /* ... */ );
Install and use in the Browser
Use a tool like Browserify or webpack.
Quick overview through code examples
Attempt( function( notifySuccess, notifyFailure, notifyProgress ) {
firstAsync( function( error ) {
notifyProgress( "first done" );
if ( error ) {
notifyFailure( error );
} else {
secondAsync( function( error, value ) {
notifyProgress( "second done" );
if ( error ) {
notifyFailure( error );
} else {
notifySuccess( "first done" );
}
} );
}
} );
} ).progress( function( string ) {
// the progress string as notified
} ).success( function( value ) {
// the value from secondAsync if successful
} ).failure( function( error ) {
// the error otherwise
} ).always( function() {
// always called (for successes AND failures)
} );
Chain
var attempt = Attempt( function( notifySuccess ) {
setTimeout( notifySuccess, 1000, 72 );
} );
attempt.success( function( value ) {
value === 72;
} );
attempt.chain( function( value ) {
return value * 2;
} ).success( function( value ) {
value === 144;
} );
attempt.chain( function( value ) {
return Attempt( function( notifySuccess ) {
setTimeout( notifySuccess, 1000, value * 2 );
} );
} ).success( function( value ) {
value === 144;
} );
Join
var helloWorld = Attempt( function( notifySuccess ) {
notifySuccess( "hello", "world" );
} );
var sixteen = Attempt( function( notifySuccess ) {
notifySuccess( 16 );
} );
Attempt.join( helloWorld, sixteen, true ).success( function( a, b, c ) {
// a is [ "hello", "world" ]
// b is 16
// c is true
} );
var failed = Attempt( function( _, notifyFailure ) {
notifyFailure( "woops" );
} );
Attempt.join( helloWorld, failed ).failure( function( error ) {
error === "woops";
} );
Utilities
var helloWorld = Attempt.createSuccess( "hello", "world" );
helloWorld.success( function( a, b ) {
a === "hello";
b === "world";
} );
var failed = Attempt.createFailure( "woops" );
failed.failure( function( arg ) {
arg === "woops";
} );
Consume Promises
var promise = new Promise( function( resolve ) {
resolve( "YEAH!" );
} );
Attempt( promise ).success( function( value ) {
value === "YEAH!";
} );
Produce Promises
var attempt = Attempt( function( notifySuccess ) {
notifySuccess( "YAWP!" );
} );
attempt.promise().then( function( value ) {
value === "YAWP!";
} );
License
Copyright (c) 2015 Julian Aubourg
Licensed under the MIT license.