TP is Tiny (1.5kb minefield) is implementation of Promises/A+ spec by using ec5 js only. It's an agnostic, cross-browser and very lightweight library to polyfill native promise and it simple enough to extend it with more features
TP is compatible with the following browsers/versions:
- Google Chrome
- Firefox
- Safari
- IOS Safari
- Opera
- IE 7+
spec's test come from Promises/A+ Compliance Test Suite
const promise = TP(function init( resolve, reject ){
//some code that call resolve or reject at some point
})
// define new promise that fulified after two seconds
var promise1 = new TP(function (res, rej){
setTimeout(function() {
res('go on');
}, 2000);
})
const newPromise = promise.then( fulifiedCallback ( value ){} , rejectCallback(reson){})
const newPromise = promise.catch( rejectCallback(reson){} )
promise.status // return the status of the promise can be: 'pending', 'reject', 'resolve'
promise.value // return the value of the promise can come from resolve or reject
// then return new value that depend on the fulified value
var promise2 = promise1
.then(function fulifiedCallback(value) {
console.log(value); // echo 'go on'
return value + ' again';
})
// do somthing with the new value but expetion are happend so new promise rejected
.then(function (value) {
console.log(value); // echo 'go on again'
throw 'what"s happen???'
})
// catch the expection and do somthing with it
.catch(function(err) {
console.log(err); // 'what"s happen???'
return 'every thing ok now'
})
// after that promise are ok again
.then (function (value){
console.log(value); // 'every thing ok now'
})
// the value that return can be promise, so what happen next depend on the status of the promise
.then( function (value){
return TP.reject( 'sorry, it just happen' )
})
.catch(function rejectCallback(err) {
console.log(err); // 'sorry, it just happen'
return 'every thing ok now'
})
// the value that return can be even *thentable*, so now the object that you write can decide what happen next
.then( function (value){
return {
then:function(res, rej){
Math.random()>0.5> res('ye'), rej('ho no')
}
}).then( function onFullified(value){
console.log(value) // 'ye'
},function onReject(reason){
console.log( reason ) // 'ho no'
})
TP.all([promise1, promise2, ...] )
.then(function onAllFilied(values){
promise1Value = value[0];
promise2Value = value[1];
...
},function someReject(reason){
// when one of the promises rejected
})
TP.race([promise1, promise2, ...] )
.then(
function whenFirstPromiseResolve(value){},
function orWhenFirstPromiseReject(reason){}
)
rejectedPromise = TP.reject(reason);
resolvedPromise = TP.resolve(value);
{promise, resolve, reject} = TP.deferred();