2016-10-20 2 views
1

Ich spiele mit der Schicksals-API herum und bin auf ein kleines Problem gestoßen. Wenn ich Details zu einem Zeichen anfordere, gibt es ein Objekt zurück, aber die Werte sind IDs, die dann in einen anderen API-Aufruf an 'das Manifest' übergeben werden müssen, der ein Objekt für diese ID zurückgibt.Sequentielle Versprechen, während die Werte weitergegeben werden

Ich mache die API-Aufrufe mit "Anfrage-Versprechen", aber es bedeutet, dass ich Anrufe verschachteln muss, über die ich nicht glücklich bin.

Ich muss einige Daten von der ersten Anfrage behalten und dann einen weiteren Anruf machen, um das letzte Stück Daten zu erhalten.

zB:

request('destiny-character-api') 
.then(character => { 
    // Keep some of the data from character, eg className 
    request(`destiny-manifest-api/${character.item}`) 
    .then(item => { 
     // Overwrite character.item with the value of item.name 
     return item; 
    }); 
}); 

Ich brauche einen Weg, um die zweite Anfrage warten, bis die ersten hat zurückgekehrt, und dann den zurückgegebenen Wert in die zweite Anfrage übergeben.

Dank

+0

Es gibt * nichts * falsch mit der Verschachtelung in dieser Situation, es ist eine völlig gültige Lösung (abgesehen von der vergessenen "Rückkehr" im äußeren Rückruf) – Bergi

Antwort

1

Statt Verschachtelung Anrufe, man kann chain your promises, etwa so:

request('destiny-character-api') 
.then(character => { 
    return request(`destiny-manifest-api/${character.item}`); 
}) 
.then(item => { 
    return item; 
}); 

Wenn Sie auf einige Daten übergeben müssen vom ersten Erfolg Handler in den zweiten, dann ein Promise.all() zurückkehren, Übergeben Sie in einem Array mit Ihrem zweiten request zusammen mit allen Daten, die Sie senden möchten. z. B.

+0

Hallo, danke für die Antwort, ich muss tatsächlich einige der behalten Daten von der ersten Anfrage. Ich hätte das wahrscheinlich in der Frage spezifiziert ... Ich werde jetzt bearbeiten – abbott567

+0

@ abbott567 Oh cool. Ich habe meine Antwort auch aktualisiert. –

+0

Super! Das habe ich gesucht! Vielen Dank – abbott567

0

Wenn Sie Anrufe nicht verschachteln möchten, können Sie die Anforderung der Anforderung zurückgeben und in flachen Stil fortfahren.

return request('destiny-character-api') 
.then(character => { 
    return request(`destiny-manifest-api/${character.item}`); 
}).then(item => { 
    return item; 
}); 

Auf diese Weise wird der Code flach sein. Lesen Sie über die Verkettung von Versprechen.

Wissen Sie nicht, was Sie meinen, indem Sie die zweite Anfrage abhalten .... in diesem Code wird die zweite Anfrage ausgelöst, nachdem die erste abgeschlossen ist.

Verwandte Themen