backbone.routemanager icon indicating copy to clipboard operation
backbone.routemanager copied to clipboard

Doesn't reset state when you call reject/resolve

Open sontek opened this issue 13 years ago • 1 comments
trafficstars

If you call this.defer() and later call this.resolve() it keeps handler.isDefer set as well as leaves the deferred in async._bucket. After you call resolve or reject this needs to reset the state so that you can continue doing routing.

sontek avatar Nov 12 '12 21:11 sontek

This fixes it for me but probably not the best solution:

handler.defer = function(deferred) {
  handler._isDefer = true;

  // Allow a deferred to be passed in
  deferred = deferred || options.deferred();

  // Add to the list of deferreds
  async._bucket.push(deferred);

  var old_rej = deferred.reject
  var old_res = deferred.resolve

  deferred.reject = function() {

    handler.isDefer = false;
    async._bucket = [];
    old_rej();
  }

  deferred.resolve = function() {
    handler.isDefer = false;
    async._bucket = [];
    old_res();
  }

  return deferred;
};

sontek avatar Nov 12 '12 22:11 sontek