2017-01-24 2 views
-1

Ich habe Code, der ein Dokument von einer API basierend auf seinem Index zurückgibt, und ich möchte schrittweise über die API iterieren. Ich weiß nicht, wie viele Elemente die API haben wird, weshalb ich Daten abholen möchte, bis eines der Versprechen abgelehnt wird. Im Idealfall würde dies einen Generator erfolgen unter Verwendung von in Werte passieren, aber ich weiß nicht, wie ich die folgende Passage Arbeit machen würdeVersprechungen generieren, bis abgelehnt

someapifunc() // Returns a promise 

function* apifuncs() { 
    var index = yield 1; 
    index++; 
    yield someapifunc(index - 1); 
} 

let calls = apifuncs(); 
apifuncs.next().value.then() // Works 
apifuncs.next().value.then() // This won't because index and everything is out of the current scope 
+0

sein Was Sie als das Endergebnis brauchen? Brauchen Sie die Zwischenergebnisse? –

Antwort

0

Ab Index 100, wenn der API-Aufruf keinen Fehler zurückgibt, Es druckt die Daten und ruft dann einen niedrigeren Index auf. Wenn der API-Aufruf einen Fehler zurückgibt, wird "Fertig" gedruckt.

function callAPI(index) { 
    someapifunc(index).then(
    function(data) { 
     console.log(data); 
     callAPI(++index); 
    }, 
    function(err) { 
     console.log('Done'); 
    } 
); 
} 
callAPI(1); 
+0

der Originalcode scheint bei 1 zu starten und inkrementieren –

+0

Ahh ja, ich werde aktualisieren. –

1

Dies zu schließen sein kann, was Sie wollen, jedoch wird der letzte Wert „erzeugt“ ein abgelehnter Versprechen

function* apifuncs() { 
    var index = 1; 
    var ok = true; 
    var p; 
    while(ok) { 
     p = someapifunc(index); 
     p.catch(() => ok = false); 
     yield p; 
     index += 1; 
    } 
} 
Verwandte Themen