Skip to content

Instantly share code, notes, and snippets.

@ArnaudWopata
Created July 7, 2014 15:28
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ArnaudWopata/c09b6d1d82407bfc697b to your computer and use it in GitHub Desktop.
Save ArnaudWopata/c09b6d1d82407bfc697b to your computer and use it in GitHub Desktop.
Understand promises
var Q = require('kew');
function failureSync(){
throw new Error('sync failure');
};
function failureAsync(){
return Q.reject(new Error('async failure'));
};
function successSync(){
return "OK";
};
function successAsync(){
return Q.resolve("OK");
};
var test1 = Q.resolve().then(failureSync).then(function(){
console.log('should never be triggered');
}).fail(function(){
console.log('test 1 - should be triggered');
});
var test2 = Q.resolve().then(failureAsync).then(function(){
console.log('should never be triggered');
}).fail(function(){
console.log('test 2 - should be triggered');
}).then(function(){
console.log('test 2 - should also be triggered');
});
var test3 = Q.resolve().then(failureAsync).then(function(){
console.log('should never be triggered');
}).fail(function(){
console.log('test 3 - should be triggered');
return failureAsync();
}).then(function(){
console.log('test 3 - should not be triggered');
}).fail(function(){
console.log('test 3 - should also be triggered');
});
function oneFailureAmongSeveralSuccesses(){
return Q.all([
successAsync(), failureAsync(), successAsync()
])
};
var test4 = oneFailureAmongSeveralSuccesses().then(function(){
console.log('should never be triggered');
}).fail(function(err){
console.log('test oneFailureAmongSeveralSuccesses - should be triggered', err);
});
function oneRescuedFailureAmongSeveralSuccesses(){
return Q.all([
successAsync(), failureAsync().fail(function(){
return 'rescued this one';
}), successAsync()
])
};
var test5 = oneRescuedFailureAmongSeveralSuccesses().fail(function(){
console.log('should never be triggered');
}).then(function(results){
console.log('test oneRescuedFailureAmongSeveralSuccesses - should be triggered', results);
});
handle = setInterval(function(){}, 1000);
Q.all([test1, test2, test3, test4, test5]).then(function(){
clearInterval(handle);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment