function cancel(reason) {
      var interimElement = stack.shift();
      interimElement.remove().then(function () {
        interimElement.deferred.reject(reason);
      });