2017-02-27 2 views
2

Ich habe eine Frage mit Versprechen in Node JS. Ich muss eine JSON-Zeichenfolge mit einigen Daten aus zwei Versprechen machen, aber es macht nicht richtig. Das ist mein Code:Make String mit Versprechen in Knoten JS

var aux = "{"; 

geocoder.reverse(initPointReversing) 
    .then(function(initData) { 
    aux += "originAddress:'" + initData[0].formattedAddress + "',"; 
    }) 
    .catch(function(err) { 
    console.log(err); 
    }); 

geocoder.reverse(endPointReversing) 
    .then(function(endData) { 
    aux += "destinationAddress:'" + endData[0].formattedAddress + "',"; 
    }) 
    .catch(function(err2) { 
    console.log(err2); 
    }); 

aux += "}"; 

Innerhalb der Versprechen. die Zeichenfolgen haben Wert, aber außerhalb ist das Ergebnis nur "{}"

Wie kann ich diese Versprechen richtig verwenden?

+0

Sie müssen warten, bis der asynchrone Code abgeschlossen ist –

+0

Anstatt einen JSON-String manuell zu erstellen, wird es wahrscheinlich viel einfacher sein, ein Objekt mit den gewünschten Eigenschaften zu erstellen und dann 'JSON.stringify' aufzurufen, um alles zu überprüfen wird richtig formatiert. Ihr aktueller Code kann keine Anführungszeichen enthalten. – 4castle

+0

Die JSON-Zeichenfolge ist nur ein Beispiel. Ich möchte herausfinden, wie die Versprechen funktionieren –

Antwort

1

einfachste Weg ist Promise.all

var p1 = geocoder.reverse(initPointReversing) 
.then(function(initData) { 
    return initData[0].formattedAddress; 
}); 

var p2 = geocoder.reverse(endPointReversing) 
.then(function(endData) { 
    return endData[0].formattedAddress; 
}); 

Promise.all([p1, p2]).then(function(results) { 
    var t = {originAddress: results[0], destinationAddress: results[1]}; 
    var aux = JSON.stringify(t); 
}) 
.catch(function(err) { 
    console.log(err); 
}); 

verwenden Wenn Sie die neueste verwenden Knoten,

var p1 = geocoder.reverse(initPointReversing).then(initData => initData[0].formattedAddress); 
var p2 = geocoder.reverse(endPointReversing).then(endData => endData[0].formattedAddress); 

Promise.all([p1, p2]).then(([originAddress, destinationAddress]) => {} 
    var aux = JSON.stringify({originAddress, destinationAddress}); 
    // do things 
}) 
.catch(function(err) { 
    console.log(err); 
}); 
+0

Danke, das hilft mir wirklich, etwas über Versprechen zu lernen –

0

Try this:

Promise.all([geocoder.reverse(initPointReversing),geocoder.reverse(endPointReversing)]) 
.then(function(values) { 
    aux = "{"; 
    aux += "originAddress:'" + values[0][0].formattedAddress + "',"; 
    aux += "destinationAddress:'" + values[1][0].formattedAddress + "',"; 
    aux = "}"; 
}) 
.catch(function (err) { 
    console.log(err); 
}); 

Wie Promise.all verwenden möchten, können Sie betrachten this

Verwandte Themen