You're pushing a .each
result, rather than the promises. $.when waits for each promise in an array of promises to fulfill. Your condition is backwards, try:
$("input").each(function(){
promises.push($.get("processRequest?value="+this.value,
function(){
$("div ##div_"+i).html("done with input " + i);
}
)
});
Or alternatively:
var promises = $("input").map(function(e){
return $.get("processRequest?value="+e.value,...);
}).get();
As a side note, divs with incremental numeric IDs are usually indicative of a code design problem.