adrianvlupu
7/23/2014 - 9:46 AM

deferred object js

deferred object js

var $d = (function () {
  function $d() {
    var self = this;
    
    this._success = [];
    this._fail = [];
    this.promise = {
      then: function (callback) {
        self._success.push(callback);
      },
      fail: function(callback){
        self._done.push(callback);
      }
    };
  }
  
  $d.prototype = {
    execute: function (list, args) {
      var i = list.length;
      args = Array.prototype.slice.call(args);
      while (i--) list[i].apply(null, args);
    },
    resolve: function () {
      this.execute(this._success, arguments);
    },
    reject: function () {
      this.execute(this._fail, arguments);
    }
  };
  return $d
}) ();


//API Method
var getStuff = function () {
  var d = new $d();
  //mare ajax
  setTimeout(function () {
    d.resolve('Explosions');
  }, 1000);
  
  //return a promise
  return d.promise;
};

getStuff().then(function (data) {
  console.log('BOOM ' + data);
});