At times, we come across situations in which we want to act when a process completes, but we don't necessarily know how long the process will take, or even if it will be successful. To handle these cases, jQuery offers us deferred objects (promises). A deferred object encapsulates an operation that takes some time to complete.
A new deferred object can be created at any time by calling the $.Deferred() constructor. Once we have such an object, we can perform long-running operations and then call the .resolve() or .reject() methods on the object to indicate whether the operation was successful or unsuccessful. It is somewhat unusual to do this manually, however. Typically, rather than creating our own deferred objects by hand, jQuery or its plugins will create the object and take care of resolving or rejecting it. We just need to learn how to use the object that is created.