JSFiddle - React, Tailwind, and code Playground
HTML
<p>You have 5 seconds to inject!</p>
<button id="inject">Inject Deferred 3</button>
<button id="resolve">Resolve Deferred 3</button>
<p>Deferred 1: <span id="dfd1">pending<span></p>
<p>Deferred 2: <span id="dfd2">pending<span></p>
<p>Deferred 3: <span id="dfd3">pending<span></p>
<h1 id="result"></h1>
JavaScript
var dfd1 = $.Deferred(),
dfd2 = $.Deferred(),
fixed = [ dfd1.promise(), dfd2.promise() ],
multiplexed = $.when.apply($, fixed), // Bundle the fixed ones
reservoir = []; // Reservoir for dynamic promises
var ultimate = multiplexed.pipe(function () {
return $.when.apply($, reservoir);
});
ultimate.done(function() {
$("#result").append("Done!");
console.log( multiplexed.state() );
});
window.setTimeout(function () {
dfd1.resolve();
$("#dfd1").text("resolved");
}, 2500);
window.setTimeout(function () {
dfd2.resolve();
$("#dfd2").text("resolved");
}, 5000);
var dfd3 = $.Deferred();
$("#inject").click(function () {
reservoir.push(dfd3.promise());
});
$("#resolve").click(function () {
dfd3.resolve();
$("#dfd3").text("resolved");
});