0.4.0 • Published 10 years ago

attempt-js v0.4.0

Weekly downloads
24
License
-
Repository
github
Last release
10 years ago

NPM Build Status Coverage Status Dependency Status devDependency Status gratipay

IE 6+ Firefox 3.6+ Chrome 14+ Safari 4+ Opera 11+ iOS 3+ Android 4+

Attempt

Utility objects to represent and interact with asynchronous operations.

Install and use in Node

  1. Add the dependency: npm install attempt-js --save
  2. 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.

0.4.0

10 years ago

0.3.0

10 years ago

0.2.0

10 years ago

0.1.0

10 years ago

0.0.1

10 years ago

0.0.0

10 years ago

0.0.0-pre

10 years ago