2017-02-27 4 views
2

ノードJSで約束した質問があります。 2つの約束事に由来するデータを含むJSON文字列を作成する必要がありますが、それは正しくありません。これは私のコードです:ノード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 += "}"; 

約束の中にあります。文字列には値がありますが、結果は唯一のものです"{}"

どうすればこれらの約束を正しく使う必要がありますか?

+0

非同期コードが完了するのを待つ必要があります –

+0

手動でJSON文字列を作成するのではなく、必要なプロパティを持つオブジェクトを作成してから、JSON.stringifyを呼び出して適切にフォーマットされます。あなたの現在のコードは引用符をエスケープしません。 – 4castle

+0

JSON文字列は一例に過ぎず、私は約束がどのように機能するかを学んでいます。 –

答えて

1

で見ることができる最も簡単な方法は、あなたが最新のを使用している場合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); 
}); 

を使用することですノード、

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

ありがとう、本当に約束を学ぶのに役立ちます –

0

はこのお試しください:Promise.allを使用する方法

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); 
}); 

を、あなたはthis

関連する問題