基本的には、最初の2つの関数の結果を待ってその値を3番目の関数に渡します。したがって、ノードQモジュールで私は以下のコードを試しました。ノードJSは複数の約束から値を取得する
getAddressDetail("", 51.528308, -0.3817812).then(function (pickupLoc) {
return pickupLoc.location;
}).then(function (pickupLocation) {
var drop = getAddressDetail(, 51.528308, -0.3817812);
return [pickupLocation,drop.location];
})
.then(function (pickupLocation, dropLocation) {
console.log("#####" + pickupLocation +"$$$" + dropLocation)
})
.done();
EDIT
function getAddressDetail(location = "", lat, long) {
var deferred = Q.defer();
var getLocation = "";
if (location == '' || location == 'undefined') {
var url = 'https://maps.googleapis.com/maps/api/geocode/json?key={APIKEY}&latlng=' + lat + ',' + long + '&sensor=false';
request({
url: url,
json: true
}, function(error, response, body) {
if (!error && response.statusCode === 200) {
getLocation = body.results[0].formatted_address;
deferred.resolve({
'location': getLocation
});
//console.log("*******" + getLocation);
}
})
} else {
getLocation = location;
deferred.resolve({
'location': getLocation
});
}
return deferred.promise;
}
しかし、このコードは、それが未定義戻り、次いで第2のコード "dropLocation" で定義された値を返しません。ここに何か問題はありますか?
ありがとうございます。
'getAddressDetail'は約束を返しますか? –
ええ、編集を参照してください。 –
2番目の 'getAddressDetail'が終了するのを待っているわけではありません。そのため、' dropLocation' begin 'undefined'の問題があります。 –