I have a function which returns a promise. I create a jQuery deferred for this purpose, which might be resolved/rejected in custom ways, depending on implementation.
One implementation uses an AJAX call, and there I'd like to redirect or queue the failure/resolution of the AJAX promise to the one which was created earlier. This means that whenever the AJAX call has a resolve/reject/progress, the deferred should trigger its own resolve/reject/progress too with the same arguments.
Here is some dummy sample code.
function Test() {
}
Test.prototype.doSomething() {
  this._deferred = $.Deferred();
  this.doSomethingImpl();
  return this._deferred;
}
var test = new Test();
test.doSomethingImpl = function() {
  var ajax = $.post(...);
  // resolve/reject/progress here the this._deferred based on the ajax promise
}
I know I can do it in a verbose way using the AJAX done, fail and progress callbacks, and manually call my deferred's corresponding method (resolve, reject or progress), but I'm seeking for kind of a one-liner, if there is any.
EDIT
Here is a code which is similar to the real one, using knockoutjs.
function GridViewModel() {
  var self = this;
  self.pageIndex = ko.observable(0);
  ...
  self._refreshRequest = ko.observable(null).extend({ rateLimit: { timeout: 200, method: "notifyWhenChangesStop" } });
  self._doRefresh = function() {
    $.ajax(...)
     .done(result) { // update rows, etc. }
     .then(
        function(r) { self._refreshPromise.resolve(r); },
        function(r) { self._refreshPromise.reject(r); },
        function(r) { self._refreshPromise.progress(r); }
      )
     .always(function() { self._refreshPromise = null; }
    // here I used the obvious verbose redirecting    
  }
  ...
  ko.computed(function() {
    var pageIndex = self.pageIndex();
    if (ko.computedContext.isInitial()) return;
    this.refreshRequest("Paging");    
  });
  ko.computed(function() {
    var refreshRequest = self.refreshRequest();
    if (ko.computedContext.isInitial() || !refreshRequest) return;
    self._doRefresh(refreshRequest);
  }
}
GridViewModel.prototype.Refresh = function(type) {
  this._refreshPromise = this._refreshPromise || $.Deferred();
  this._refreshRequest(type);
  return this._refreshPromise;
}
This code is a snippet of a complex data grid viewmodel class, and the fancy refresh solution is there to ensure that refreshing is throttled.
 
     
    