2016-05-01 4 views
1

Ich bin neu so Entschuldigung für den Mangel an Informationen.Wie Javascript korrekt verwendet wird Promise-basierte Funktionen

Ich habe Promise-basierte Funktion, die ein Objekt zurückgibt. Ich übergebe dann einen Schlüsselwert von dieser Eigenschaft, um ein anderes Objekt zu erstellen.

Ich bekomme ein Problem, wo mein neues Objekt, das ich erstelle, undefined zurückgibt. Ich denke das liegt an der asynchronen Natur von JS?

siehe unten ..

post(postObject).then((result) => { 
    console.log(result); // token found in returned object. See OBJ1 below 
    const cookie = { 
     name: 'jwtToken', 
     value: result.token, 
     path: '/', 
     domain: '.' + APP_HOST, 
     secure: false 
    }; 
    console.log(cookie); // result.token not returned. Getting undefined 
    page.addCookie(cookie); 
    }); 

cookie.value kommt zurück als undefiniert

Ich brauche die result.token als Cookie-Wert zu übergeben können.

Wenn ich Protokoll Ergebnis loggen, kann ich den Token Schlüsselwert generiert sehen.

Unten ist, was von 'Ergebnis' zurückgegeben wird. Ich versuche, Token zu bekommen, also mache ich result.token. Aber das gibt mir die ganze Zeit "undefiniert".

OBJ1:

{"token":"skjdhjkshds.sdhskjdhkshdjs.shdkjshdkjsh","isCartMerged":false} 
+0

Wo loggen Sie den 'cookie'? Wenn Sie es außerhalb dieser Funktion loggen, könnten Sie eine leere Zeichenfolge erhalten. – raiyan

+0

Konsolenmeldungen in meiner Frage hinzugefügt, um zu zeigen, was passiert. –

+2

kommt OBJ1 als String zurück? Können Sie JSON.parse() ausprobieren? [siehe] (https://jsfiddle.net/zn7c70oe/1/) – scottjustin5000

Antwort

0

Es scheint wahrscheinlich, dass Ihre result ein JSON-String ist, und Sie müssen es, um zu analysieren, zu den einzelnen Eigenschaften als ein Objekt zu erhalten. Sie können dies sicher überprüfen, indem Sie console.log(typeof result) am Anfang Ihres -Handlers einfügen, um zu sehen, ob es sich um eine Zeichenfolge oder ein Objekt handelt.

post(postObject).then((result) => { 
    console.log(typeof result);  // probably shows "string" 
    console.log(result); 
    var parsedResult = JSON.parse(result); 
    console.log(parsedResult); 
    const cookie = { 
     name: 'jwtToken', 
     value: parsedResult.token, 
     path: '/', 
     domain: '.' + APP_HOST, 
     secure: false 
    }; 
    console.log(cookie); 
    page.addCookie(cookie); 
    }); 
+0

Vielen Dank! Das hat gelöst. es. –

Verwandte Themen