Javascript等待多种方法返回

时间:2018-01-23 14:45:39

标签: javascript asynchronous callback

代码说明

我有一个从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

1 个答案:

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