Paginierte Daten rekursiv mit Versprechungen abrufen

Ich verwende eine Funktion, die Daten in einer paginierten Form zurückgibt. Es werden also maximal 100 Artikel und ein Schlüssel zum Abrufen der nächsten 100 Artikel zurückgegeben. Ich möchte alle verfügbaren Artikel abrufen.

Wie erreiche ich das rekursiv? Ist Rekursion hier eine gute Wahl? Kann ich das ohne Rekursion anders machen?

Ich verwende Bluebird 3x als Versprechen Bibliothek.

Hier ist ein Ausschnitt dessen, was ich erreichen möchte:

getEndpoints(null, platformApplication)
  .then(function(allEndpoints) {
    // process on allEndpoints
  });


function getEndpoints(nextToken, platformApplication) {
  var params = {
    PlatformApplicationArn: platformApplication
  };

  if (nextToken) {
    params.NextToken = nextToken;
  }

  return sns.listEndpointsByPlatformApplicationAsync(params)
    .then(function(data) {
      if (data.NextToken) {
        // There is more data available that I want to retrieve.
        // But the problem here is that getEndpoints return a promise
        // and not the array. How do I chain this here so that 
        // in the end I get an array of all the endpoints concatenated.
        var moreEndpoints = getEndpoints(data.NextToken, platformApplication);
        moreEndpoints.push.apply(data.Endpoints, moreEndpoints);
      }

      return data.Endpoints;
    });
}

Aber das Problem ist, dass, wenn mehr Daten abgerufen werden müssen (sieheif (data.NextToken) { ... }), wie verkette ich die Versprechen, damit ich am Ende die Liste aller Endpunkte usw. bekomme.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage