A Deferred object is a Promise with methods that allow its owner to resolve or reject it.When you call the Deferred's promise() method, you create a 'pure' Promise which is identical to the Deferred, except that the resolve() and reject() methods are missing.This is important for purposes of encapsulation, for example if you wish to return a Promise from a function, and only allow the caller to read its state or to attach callbacks to it.

The deferred.promise() method allows an asynchronous function to prevent other code from interfering with the progress or status of its internal request.

So a Promise is used when it doesn't make sense for the value to be modified. For example, when jQuery makes an AJAX request it returns a Promise object.

To bring this back to your original question, I don't think it makes any difference in your code if you attach your callbacks to the Deferred or to its Promise.However, based on what I have written above, I would prefer to use method 1.