2017-12-20 5 views
1

Ich verwende Axios, um eine AJAX-Anfrage an Twitchtvapi zu stellen. Ich habe einer Variablen mit dem Namen provide ein Versprechen gegeben.Erhalten Sie den Wert eines Versprechens?

War es möglich, die Daten innerhalb des Promise-Objekts zu erhalten? Wenn ich die .then-Methode mit dem Promise-Objekt verkette, erhalte ich einen Fehler, der dann keine Funktion ist.

Wenn ich das Beispiel variable anmelden kann ich sehen, dass es drei Versprechen mit den Werten, die ich suche in ein Array zu speichern, ähnlich wie

var example = users.map((item) => axios.get(`https://api.twitch.tv/kraken/streams/${item}?client_id=${client_id}`) 
 
    .then(res => { 
 
    console.log(res.data.stream); 
 
    return res.data.stream; 
 
    }) 
 
    .catch(error => { 
 
    console.log(error); 
 
    })); 
 
console.log(example); //an array of three Promise objects 
 
console.log(example.then(res => res.data)) //returns error example.then is not a function
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

TLDR; Wie kann ich die Daten von einem Promise-Objekt abrufen? Wenn ich versuche, die .then-Methode zu verketten, bekomme ich einen Fehler, der sagt, dass es keine Funktion ist.

Vielen Dank für jede Hilfe im Voraus.

+2

verwenden Es sieht aus wie Sie anrufen 'then' auf dem Array, dass' map' zurückkehrt, nicht auf ein Versprechen. Sie sollten wahrscheinlich "dann" innerhalb der Mapping-Funktion haben, oder "map" 'dann' über 'example'. – Carcigenicate

+0

Die Variable ist ein Array von 3 Versprechen, wenn ich etwas wie Promise.all() benutze, um all dies zu versprechen. Ich kann die then-Methode verwenden, aber das Ergebnis, das ich bekomme, ist ein anderes Versprechen – RIVERE

+1

'Promise.all (Beispiel) .then (results => console.log (Ergebnisse));' –

Antwort

2

Der folgende Code

users.map((item) => axios.get(`https://api.twitch.tv/kraken/streams/${item}?client_id=${client_id}`) 

gibt ein Array von verspricht. Ein Array an sich ist kein Versprechen. Wenn Sie möchten, einen Code auszuführen, nachdem alle Versprechen gelöst wurden, können Sie Promise.all

Promise.all(users.map(...)) 
    .then((responses) => { 
    // deal with responses[0].data 
    //   responses[1].data 
    // etc. 
    }) 
    .catch((error) => { 
    // deal with error that occurred 
    }); 
Verwandte Themen