Arbeiten mit 1 oder mehr jQuery-Versprechungen

Ich tätige entweder 1 oder mehrere REST / Ajax-Aufrufe, um einige Benutzerinformationen zu überprüfen. Die restlichen Anrufe funktionieren gut und die Informationen kommen zurück. Das Problem, vor dem ich stehe, ist nicht der Teil des Codes, der ungefähr so aussieht.

function ensureUsers(recipients){
  var promises = [];
  for(var key in recipients){
      var payload = {'property':recipients[key]};
      promises.push( $.ajax({...}));
  }
  return $.when.apply($,promises);    
}

....

ensureUsers(users) // users is an array of 1 or more users
  .done(function(){
     console.log(arguments);
  )}

Wenn sich mehr als ein Benutzer im anfänglichen Array befindet, werden die Argumente in meinem.done code sind wie folgt aufgebaut:

[[Object,"success",Object],[Object,"success",Object]...]

Ich kann dann jedes Ergebnis durchlaufen, den Status überprüfen und fortfahren.

Wenn sich jedoch nur ein Benutzer im anfänglichen Array befindet, dann.done bekommt Argumente wie dieses:

[Object,"success",Object]

Es kommt mir komisch vor, dass sich die Struktur des zurückgegebenen so ändern würde. Ich konnte zu diesem speziellen Problem nichts finden, also habe ich eine Lösung zusammen gehackt

var promises = Array.prototype.slice.call(arguments);
if(!Array.isArray(promises[0])){
    promises = [promises];  
}

Ist das wirklich das Beste, auf das ich hoffen kann? Oder gibt es eine bessere Möglichkeit, mit den zurückgegebenen Versprechungen von mindestens einem Ajax-Aufruf in jQuery umzugehen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage