2017-05-31 5 views
0

Ich habe ein paar Probleme verstehen Variablen und Funktionen mit Fetch. Ich versuche, den Wert der Antwort vonJavascript - Response undefined fetch

.then(response => response.json()) 

zu

.then(lang => response['lang'].slice(-2) 

passierte Aber ich bin die undefinierten Variable Antwort Fehler bekommen, so dass ich Referenzierung nicht die Variable korrekt. Wie lautet der richtige Aufruf?

Auch ich möchte beide Konsolen Protokolle aufrufen, das Stück Code unten tut das derzeit, aber ich denke nicht, dass ich Antwortfunktion überschreiben sollte, kann ich eine Funktion ohne Argumente oder die Befehle von selbst aufrufen?

.then(response => console.log(response['text']) & console.log(food)) 

console.log (response [ 'text']) & console.log (Lebensmittel)

fetch("https://localhost:8000", {method:"POST", body:fd}) 
    .then(response => response.json()) 
    .then(lang => response['lang'].slice(-2)) 
    .then(food => "Temporary") 
    .then(function detectType(lang) { 
    switch(lang) { 
    case 'abc': 
     food = "Bananas"; 
     break; 
    case 'def': 
     food = "Apples"; 
     break; 
    default: 
     food = "Bananas"; 
     break; 
    }}) 
    .then(response => console.log(response['text']) & console.log(food)) 
    .catch(err => console.error(err)); 
} 
+0

Warum haben Sie den Parameter der Funktion 'lang' benannt? Du tust nichts damit. Es sollte ".then (response => response ['lang']. Slice (-2))' (aber es ist egal, wie Sie den Parameter nennen). Parameter sind nur in der Funktion verfügbar, in der sie definiert sind. Siehe auch [Was ist der Gültigkeitsbereich von Variablen in JavaScript?] (Https://stackoverflow.com/q/500431/218196) –

+0

Wenn ich das mit dem Parameter mache, dann Was würde passieren, wenn ich versuche, die Antwort ['text'] aufzurufen? Dies ist ein JSON-Wörterbuch mit der Art {'text': 'a', 'lang': 'b'} – Juanvulcano

+0

Wenn Sie mit "call" einfach "access" meinen, wird die Zeichenfolge "a'" zurückgegeben. Beispiel: 'var foo = {text: 'a'}; console.log (foo ['text']); '. –

Antwort

1

Wenn ich zu verstehen, was Sie tun wollen, bedenken Sie, dass der Rückgabewert von einer Funktion ist der Zustand, der von der nächsten Funktion empfangen wird. Also würde man etwas mehr wie dies zu tun suchen:

fetch("https://localhost:8000", {method:"POST", body:fd}) 
    .then(response => response.json()) 
    .then(response => { 
    response['lang'] = response['lang'].slice(-2); 
    return response; 
    }) 
    .then(response => { 
    response['food'] = "Temporary"; 
    return response; 
    }) 
    .then(function detectType(response) { 
    switch(response['lang']) { 
     case 'abc': 
      response['food'] = "Bananas"; 
      break; 
     case 'def': 
      response['food'] = "Apples"; 
      break; 
     default: 
      response['food'] = "Bananas"; 
      break; 
    } 
    return response; 
    }) 
    .then(response => { 
    console.log(response['text']); 
    console.log(response['food']); 
    }) 
    .catch(err => console.error(err)); 
} 
1

In Bezug auf fetch(), denken Sie daran, dass es sehr ‚Versprechen schwer‘.

fetch("https://localhost:8000", {method:"POST", body:fd}) gibt ein Versprechen, die Sie mit dem ersten then() Griff

then(response => response.json())response.json() Rückkehr werden Sie den Zustand der response.json() im nächsten .then() geben. So haben Sie Zugriff auf die JSON-Darstellung der Antwort vom nächsten then().

Werfen wir einen Blick darauf werfen, wie es aussehen sollte:

fetch("https://localhost:8000", {method:"POST", body:fd}) 
    .then(response => response.json()) 
    .then(jsonResp => jsonResp['lang']); 

von der letzten Zeile können Sie überprüfen, das JSON-Objekt und seine Schlüssel läuft, ohne ein Versprechen Kette. Wenn Sie das Attribut lang überprüfen möchten, haben Sie Zugriff darauf, wie es im Beispiel angezeigt wird.

Hoffe, das hilft!

+0

* "seit' response.json() 'gibt ein Versprechen zurück" * Nein, das ist nicht der Grund. '.then' * always * gibt ein Versprechen ab. Vielleicht meinst du, dass der * Rückruf * ein Versprechen zurückgibt? In diesem Fall hast du Recht. –

+0

Bekam es, reparierte es. Vielen Dank! –