我有一个从html输入中提取值并返回格式化地址的函数。我将此函数调用两次,将每个地址存储到适当的变量中一旦我转换了两个输入,我想调用另一个函数, function z 。
ngAfterViewInit() {
//get input elements, get the first tag within the ion-input tag
this.searches.startSearch = document.getElementById("startSearch").getElementsByTagName('input')[0];
this.searches.endSearch = document.getElementById("endSearch").getElementsByTagName('input')[0];
var address1 = this.placeDecode(this.searches.startSearch)
var address2 = this.placeDecode(this.searches.endSearch)
this.methodZ(address1,address2);
}
//method convertes input into formatted address
private placeDecode(input : HTMLInputElement) {
var location = input.value;
var geoCode = new google.maps.Geocoder();
geoCode.geocode({
address: location
}, function (result, status) {
if (status === 'OK') {
return result[0].formatted_address;
} else {
return null;
}
});
}
我遇到的问题是我只想在两个输入都被转换后调用函数Z.我尝试过使用回调功能,但我无法在回调中调用 功能z 。
答案 0 :(得分:0)
我真的不明白你的解释,但我想我理解你的问题:你想等待两个功能结束,并打电话给第三个,对吧?
这是异步问题,解决这个问题的最佳方法是使用 Promises 。
在您调用两次的方法中,将return语句更改为:
return Promise.resolve(/* your old return value here */);
现在,您可以调用两次:
const callOne = myAsyncFunction(/* params */);
const callTwo = myAsyncFunction(/* params */);
最后,你可以等待两个人解决(并避免回调地狱):
Promise.all([callOne, callTwo]).then(function(values) {
console.log(values); // will contain an array of two items
});