【问题标题】:Javascript waiting for multiple methods to return [duplicate]Javascript等待多种方法返回[重复]
【发布时间】:2018-07-02 10:22:40
【问题描述】:

代码说明

我有一个从 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。我曾尝试使用回调,但我无法在回调中调用 function z

【问题讨论】:

  • 这个函数没有任何作用。你returning 什么都没有。为什么不能在回调中调用函数z?阅读并理解stackoverflow.com/q/14220321/476,那么您可能想使用Promise.all() 来等待两个promise。
  • 我没有显示我所有的代码,因为没有必要,你可以想象我调用placeDecode并检索结果,当在回调中调用z时,它说它是未定义的
  • 我无法想象你如何调用placeDecode 并检索结果,因为placeDecode 不会返回任何结果。
  • 返回结果[0].formatted_address
  • 是的,没有。这是从异步回调返回的,而不是从 placeDecode 返回的。你真的真的需要阅读和理解这个:stackoverflow.com/a/14220323/476

标签: javascript asynchronous callback


【解决方案1】:

我并没有真正理解你的解释,但我想我理解了你的问题:你想等待两个函数结束,然后调用第三个函数,对吗?

这是一个异步问题,最好的解决方法是使用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
});

【讨论】:

  • 干杯人帮了大忙
  • 很高兴我能在 SOF 警察标记它之前提供帮助:P 祝你的项目好运!
  • 是的,当我试图寻求帮助时很烦人
  • 你必须明白,有些问题是有据可查和验证的,你只需要知道如何搜索,但我同意当你想要一个针对你自己的问题定制的简单答案时,这很烦人。跨度>
  • 是的,有时我的具体问题可能与有据可查的答案略有不同,这可能会让我失望。
猜你喜欢
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多