基本上我想要做的是等待并获得前两个函数结果并将该值传递给第三个函数。因此,使用Node 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;
}
然而此代码不会返回其在第二然后代码 “dropLocation” 定义的值,它返回为未定义。你看到这里有什么问题吗?
在此先感谢。
getAddressDetail是否返回承诺? –
是的,看到编辑。 –
您并未等待第二个'getAddressDetail'完成,这就是为什么'dropLocation'的问题开始未定义。 –