yet another Promises/A+ implementation which works in both browser and node
Install
Bower
bower install -S yapi
NPM
npm install --save yapi
Usage
You can use two ways to create a promsie.
Option 1
Use YAPI.createPromsie method.
var promise = YAPI.createPromise(function (resolve, reject) { // if promise is fulfilled resolve(); // or if promise is rejected reject(); }); promise.then(function () { // fulfilled callback }, function () { // rejected callback });
Here is an example of a simple XHR2 wrapper written using YAPI.js:
var getJSON = function(url) { var promise = YAPI.createPromise(function(resolve, reject){ var client = new XMLHttpRequest(); client.open("GET", url); client.onreadystatechange = handler; client.responseType = "json"; client.setRequestHeader("Accept", "application/json"); client.send(); function handler() { if (this.readyState === this.DONE) { if (this.status === 200) { resolve(this.response); } else { reject(this); } } }; }); return promise; };
Check the example.html for a full demo which uses the about XHR2 wrapper.
Option 2
Manualy create a deferred object and resolve/reject it ondemand.
var getUserInfo = function () { var deferred = YAPI.defer(); // fetch user information throught AJAX deferred.resolve(); // if AJAX request succeed // or deferred.reject(); // if something wrong return deferred.promise; };
Develop
npm test # run Promises/A+ Compliance Test Suite grunt build # jshint & generate min version
Todos
- refine readme
- add usage information
- add Promise/A+ logo after pass Promises/A+ Compliance Test Suite
- provide minimized version
- provide
YAPI.allmethod - provide
promise.finally - provide
promise.catch - test against Promises/A+ Compliance Test Suite