асинхронный не ждет ожидания в обратном вызове - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть функция, которая должна быть асинхронной, потому что мне нужно, чтобы она спала в какой-то момент в течение полсекунды, но тогда я просто хотел бы, чтобы она была полностью последовательной. Я делаю следующее:

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
  }

checkNearestStreetView(panoData){
  if(panoData){
    if(panoData.location){
      if(panoData.location.latLng){
        console.log("new panodata" + panoData.location.latLng);
        this.currentpos = panoData.location.latLng;
        console.log("new panodata:" + this.currentpos);
      }
    }
  } else {
    this.currentpos = null;
    console.log("no new panodata");
  }
}    

async updateLocation(feature, layer) {
      console.log("Oh");
      await sleep(500);
      console.log("Hi");
      console.log("Mark!");

      var webService = new google.maps.StreetViewService();  
      var checkaround = 50;

      ...

      console.log("curentpos before checknearest " + this.currentpos);
      await webService.getPanoramaByLocation(this.currentpos, checkaround, await this.checkNearestStreetView.bind(this));
      console.log("curentpos after checknearest " + this.currentpos);      
    console.log("success");
  }

Я бы хотел, чтобы checkNearestStreetView полностью запустился до того, как код продолжит выполняться, поэтому я пытаюсь await выполнить его и продолжить только после его завершения. Но с приведенным выше кодом checkNearestStreetView работает в асинхронном режиме, и я получаю следующий вывод на консоль:

Oh
Hi
Mark! 
curentpos before checknearest (42.59678542, -76.15251434999999) 
curentpos after checknearest (42.59678542, -76.15251434999999)
success
no new panodata

Значение checkNearestStreetView завершает работу только после , когда все остальное запускается, даже если я сказал функции await it (и getPanoramaByLocation). Может быть, я что-то неправильно понимаю по теме await, пожалуйста, помогите мне узнать, почему это происходит именно так!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...