Javascript正在等待多个方法返回 代码解释

Javascript正在等待多个方法返回 代码解释,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,我有一个从html输入中提取值并返回格式化地址的函数。我调用这个函数两次,将每个地址存储到适当的变量中。转换完两个输入后,我想调用另一个函数,函数z ngAfterViewInit(){ //获取输入元素,获取ion输入标记中的第一个标记 this.searches.startSearch=document.getElementById(“startSearch”).getElementsByTagName(“输入”)[0]; this.searches.endSearch=document.

我有一个从html输入中提取值并返回格式化地址的函数。我调用这个函数两次,将每个地址存储到适当的变量中。转换完两个输入后,我想调用另一个函数,函数z

ngAfterViewInit(){
//获取输入元素,获取ion输入标记中的第一个标记
this.searches.startSearch=document.getElementById(“startSearch”).getElementsByTagName(“输入”)[0];
this.searches.endSearch=document.getElementById(“endSearch”).getElementsByTagName(“输入”)[0];
var address1=this.placeDecode(this.searches.startSearch)
var address2=this.placeDecode(this.searches.endSearch)
本方法Z(地址1,地址2);
}
//方法将输入转换为格式化地址
private placeDecode(输入:HTMLInputElement){
var位置=输入值;
var geoCode=new google.maps.Geocoder();
geoCode.geoCode({
地址:地址
},功能(结果、状态){
如果(状态=='OK'){
返回结果[0]。格式化的\u地址;
}否则{
返回null;
}
});

}
我不太理解您的解释,但我想我理解了您的问题:您想等待两个函数结束,然后调用第三个函数,对吗

这是一个异步问题,解决这个问题的最佳方法是使用承诺

在调用两次的方法中,将return语句更改为:

return Promise.resolve(/* your old return value here */);
现在,你可以叫它两次:

const callOne = myAsyncFunction(/* params */);
const callTwo = myAsyncFunction(/* params */);
最后,您可以等待这两个问题得到解决(并避免出现回调地狱):


此函数没有任何作用。你的
return
一无所获。为什么不能在回调中调用函数
z
?阅读并理解,然后您可能想使用
Promise.all()
等待两个承诺。我没有显示所有代码,因为没有必要,您可以想象我在回调中调用z时调用placeDecode并检索结果,它说它是未定义的。我真的无法想象如何调用
placeDecode
并检索结果,因为
placeDecode
不返回任何结果。返回结果[0]。格式化的\u地址是的,不是。这是从异步回调返回的,而不是从
placeDecode
返回的。你真的需要阅读并理解这一点:干杯人帮助了一个我可以帮助的人,在SOF警察标记它之前:P祝你的项目好运!是的,当我试图得到一些帮助的时候,真的很烦人。你必须理解,有些问题有很好的记录和验证,你只需要知道如何搜索,但我同意,当你想要一个针对自己问题定制的简单答案时,这很烦人。是的,有时我觉得我的具体问题可能与记录良好的答案略有不同,这会让我感到厌烦。
Promise.all([callOne, callTwo]).then(function(values) {
  console.log(values); // will contain an array of two items
});