title: Return already resolved promise
body: <p>I have an existing project that has a lot of asynchronous functions that return promises.  I'm adding some caching so that in some cases the asynchronous functions will complete synchronously and would like to make this code shorter/better if possible:</p>
  
  <pre><code>        return $.Deferred(function(def) { def.resolve(); }).promise();
  </code></pre>
  
  <p>For example, I have a Data Service class that handles most AJAX requests that looks like this:</p>
  
  <pre><code>function DataService() {
  
      var self = this;
  
      self.makeRequest = function(functionName, data) {
          return $.Deferred(function(def) {
  
              var jsonData = JSON.stringify(data);
  
              $.ajax({
                  type: "POST",
                  url: "WebService.asmx/" + functionName,
                  data: jsonData,
                  contentType: "application/json; charset=utf-8",
                  dataType: "json",
                  error: function(xhr, status, error) {
                      var ex;
                      try {
                          ex = eval("(" + xhr.responseText + ")");
                          ex.message = ex.Message;
                          ex.Message = undefined;
                      } catch (ex2) {
                          ex = { message: "Invalid Response From Server:\r\n" + xhr.responseText };
                      }
                      if (ex.message == "LoginRequired") {
                          app.viewModels.main.loginRequired(true);
                      }
                      else {
                          app.showError(ex.message);
                      }
                      def.reject(ex.message);
                  }
              });
          }).promise();
      }
  }
  </code></pre>
  
  <p>Then I have a function in another class that currently always calls makeRequest:</p>
  
  <pre><code>self.deleteMe = function()
  {
     return app.dataservice.makeRequest('deleteItem');
  }
  </code></pre>
  
  <p>I want to update the deleteMe function so that it doesn't always call makeRequest, and instead just does some synchronous work and then returns.  It needs to return a promise though, because whatever called it will be expecting that, but it needs to be an "already completed/resolved promise".  Currently I am using the first set of code above to do that.  Seems like there must be a better way.</p>