Verstehe einer Promises
pl
- javascript
Hi,
im Fehlerfall kommt serverseitig status != 200, wie krieg ich da den Responsetext ausgegegen?
fetch('%url%?fetch='+nr).then(function(response) {
return response.status == 200 ? response.text() : 'Fehler: '+response.text();
}).then(function( text ) {
pretext(text);
});
Wenn status == 200 ist, krieg ich den text, anderweitig jedoch [object Promise]
Bitte mal um Hinweise. MfG
Tach!
im Fehlerfall kommt serverseitig status != 200, wie krieg ich da den Responsetext ausgegegen?
fetch('%url%?fetch='+nr).then(function(response) { return response.status == 200 ? response.text() : 'Fehler: '+response.text(); }).then(function( text ) { pretext(text); });
Wenn status == 200 ist, krieg ich den text, anderweitig jedoch [object Promise]
Wenn du ein Promise siehst, dann ist das der Rückgabewert von fetch() oder then(). Innerhalb der then()-Callbacks bekommst du das Promise-Objekt nicht übergeben.
Außerdem wird bei Netzwerkfehlern (404 gehört nicht dazu, das ist eine normale HTTP-Antwort) das Promise nicht erfüllt und die Callbacks in then() werden nicht aufgerufen. Auf Netzwerkfehler kannst du im catch()-Callback reagieren.
dedlfix.
hi,
Außerdem wird bei Netzwerkfehlern (404 gehört nicht dazu, das ist eine normale HTTP-Antwort) das Promise nicht erfüllt und die Callbacks in then() werden nicht aufgerufen. Auf Netzwerkfehler kannst du im catch()-Callback reagieren.
Das wäre meine nächste Frage, was übergebe ich new Error(response)
oder new Error(response.text())
ich hab beides probiert, erhalte jedoch in err.messgage wiederum nur ein Promise Objekt.
Wie komme ich an den Text? In der Response ist er ja wie ein Blick in die Konsole zeig.
Danke im Vorab.
Tach!
Außerdem wird bei Netzwerkfehlern (404 gehört nicht dazu, das ist eine normale HTTP-Antwort) das Promise nicht erfüllt und die Callbacks in then() werden nicht aufgerufen. Auf Netzwerkfehler kannst du im catch()-Callback reagieren.
Das wäre meine nächste Frage, was übergebe ich
new Error(response)
odernew Error(response.text())
ich hab beides probiert, erhalte jedoch in err.messgage wiederum nur ein Promise Objekt.
Wenn du nicht aus der Dokumentation zu fetch() entnehmen möchtest, wo genau du hingreifen musst, um deine gewünschten Daten zu bekommen, dann kann console.log() helfen, das was du da übergeben bekommst zu analysieren.
Du solltest aber erstmal sagen, welche Art von Fehler du abzufangen zu gedenkst. Ist es eine normale HTTP-Response mit Statuscode oder ein Netzwerkfehler?
Das was du da fängst, ist vermutlich nicht das was du im then() geworfen hast, sondern etwas, das von fetch() geworfen wurde. Das Promise müsste dann auch im Status rejected sein (siehe Ausgabe von console.log(dein_promise)
).
dedlfix.
Tach!
Du solltest aber erstmal sagen, welche Art von Fehler du abzufangen zu gedenkst. Ist es eine normale HTTP-Response mit Statuscode oder ein Netzwerkfehler?
Es ist eine normale HTTP Response mit Statuscode 502. Siehe auch problematische Seite die ich extra dafür hingestellt habe. MfG
Tach!
Du solltest aber erstmal sagen, welche Art von Fehler du abzufangen zu gedenkst. Ist es eine normale HTTP-Response mit Statuscode oder ein Netzwerkfehler?
Es ist eine normale HTTP Response mit Statuscode 502. Siehe auch problematische Seite die ich extra dafür hingestellt habe.
Ah, jetzt, ja. Mit fetch() hab ich selbst noch nicht direkt gearbeitet und nicht richtig geschlussfolgert, was Response.text() da als Resultat bringt. Das bringt tatsächlich nicht den Inhalt der Response als Text, sondern selbigen in ein weiteres Promise verpackt. Der Inhalt ist also so nicht direkt nutzbar, sondern muss erst aufgelöst werden.
Das Beispiel im MDN macht es sich einfach und wirft ein Error-Objekt mit neuem Text, ignoriert also den Body der Response.
dedlfix.
Moin,
Das Beispiel im MDN macht es sich einfach und wirft ein Error-Objekt mit neuem Text, ignoriert also den Body der Response.
Ja genau deswegen habe ich ja diesen Thread hier aufgemacht. Frage nochmal: Wie komme ich an den Text? MfG
Tach!
Ja genau deswegen habe ich ja diesen Thread hier aufgemacht. Frage nochmal: Wie komme ich an den Text?
Die Antwort steckt bereits im nicht zitierten Teil: das response.text()-Promise auflösen. Oder genauer gesagt, dem Promise einen Callback spendieren, der vom Promise mit dem Text aufgerufen wird.
dedlfix.
Tach!
Ja genau deswegen habe ich ja diesen Thread hier aufgemacht. Frage nochmal: Wie komme ich an den Text?
Die Antwort steckt bereits im nicht zitierten Teil: das response.text()-Promise auflösen. Oder genauer gesagt, dem Promise einen Callback spendieren, der vom Promise mit dem Text aufgerufen wird.
Ja das weiß ich auch schon. Wie spendiere ich dem promise ein Callback? Hast Du evntl. ein Code-Beispiel? MfG
Tach!
Wie spendiere ich dem promise ein Callback? Hast Du evntl. ein Code-Beispiel?
Steht in deinem Ausgangsposting. fetch() liefert auch ein Promise, und wenn es aufgelöst wird, ruft es die Funktion auf, die der Methode then() übergeben wurde. Oder im Fehlerfall die Callback-Funktion der Methode catch().
dedlfix.
Wir drehen uns im Kreis. Es geht ja gar nicht um den catch Zweitg sondern darum wie ich an den text komme. Das ist völlig unabhängig von Serverstatus und dass der Text am Browser ankommt ist in der console ja zu sehen.
Um das Problem zu verdeutlichen habe ich den Code mal umgeschrieben, siehe problematische Seite:
fetch('%url%?fetch='+nr).then(function(response) {
return {m: response.text(), s: response.status};
}).then(function( x ) {
console.log(x);
});
und damit sehe ich in der console Object { m: Promise, s: 200 }
oder Object { m: Promise, s: 502 }
also auch beim status 200 ein Promise. Die Frage ist immernoch die wie ich hier nun ein callback reinbringe was das auflöst. MfG
Tach!
Die Frage ist immernoch die wie ich hier nun ein callback reinbringe was das auflöst.
resonse.text().then(callback)
dedlfix.
Tach!
Die Frage ist immernoch die wie ich hier nun ein callback reinbringe was das auflöst.
resonse.text().then(callback)
Ok, jetzt hab ichs endlich. Man muss es nur einmal anders schreiben und schon rappelts im Dachstübchen 😉
Denke!
Die Antwort ist die Art und Weise der Fehlerbehandlung im Unterschied zu legacy ajax. Erläuterungen hier mit einer DEMO.
Nochmal Danke und Schöne Grüße 😉
Moin, Solange mit FetchAPI POST funktioniert, siehe Demo und es eine FileAPI gibt, ist auch das Hochladen von Dateien möglich. Das führt mich zwangsläufig zur Frage wie man da eine Progressbar einbauen kann. Hat da jemand mal ein Beispiel?
Schönen Sonntag 😉