.promise()

Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.

.promise(type, target)🡢 Promise

type String

Default: fx

The type of queue that needs to be observed.
target PlainObjectObject onto which the promise methods have to be attached

The .promise() method returns a dynamically generated Promise that is resolved once all actions of a certain type bound to the collection, queued or not, have ended.

By default, type is "fx", which means the returned Promise is resolved when all animations of the selected elements have completed.

Resolve context and sole argument is the collection onto which .promise() has been called.

If target is provided, .promise() will attach the methods onto it and then return this object rather than create a new one. This can be useful to attach the Promise behavior to an object that already exists.

Note: The returned Promise is linked to a Deferred object stored on the .data() for an element. Since the.remove() method removes the element's data as well as the element itself, it will prevent any of the element's unresolved Promises from resolving. If it is necessary to remove an element from the DOM before its Promise is resolved, use .detach() instead and follow with .removeData() after resolution.

Using .promise() on a collection with no active animation returns a resolved Promise:

HTML
var div = $("<div>");

div.promise().done(function (arg1) {
  // Will fire right away and alert "true"
  alert(this === div && arg1 === div);
});
DEMO

Resolve the returned Promise when all animations have ended (including those initiated in the animation callback or added later on):

JS
<button>Go</button>
<p>Ready...</p>
<div></div>
<div></div>
<div></div>
<div></div>
CSS
div {
  height: 50px;
  width: 50px;
  float: left;
  margin-right: 10px;
  display: none;
  background-color: #090;
}
HTML
$("button").on("click", function () {
  $("p").append("Started...");

  $("div").each(function (i) {
    $(this)
      .fadeIn()
      .fadeOut(1000 * (i + 1));
  });

  $("div")
    .promise()
    .done(function () {
      $("p").append(" Finished! ");
    });
});
DEMO

Resolve the returned Promise using a $.when() statement (the .promise() method makes it possible to do this with jQuery collections):

JS
<button>Go</button>
<p>Ready...</p>
<div></div>
<div></div>
<div></div>
<div></div>
CSS
div {
  height: 50px;
  width: 50px;
  float: left;
  margin-right: 10px;
  display: none;
  background-color: #090;
}
HTML
var effect = function () {
  return $("div").fadeIn(800).delay(1200).fadeOut();
};

$("button").on("click", function () {
  $("p").append(" Started... ");

  $.when(effect()).done(function () {
    $("p").append(" Finished! ");
  });
});
DEMO

Looking for a Web Developer?

👋

Hi! I'm Basti, author of this site. If you are looking for a web developer with 15+ years of experience, holla at me!

Be it the good 'ol jQuery, vanilla JS or modern frameworks like Vue and Svelte, front- or backend, I can help you.

Just write me at jobs@jqapi.com :)