У меня есть функция, которая должна быть асинхронной, потому что мне нужно, чтобы она спала в какой-то момент в течение полсекунды, но тогда я просто хотел бы, чтобы она была полностью последовательной. Я делаю следующее:
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
, пожалуйста, помогите мне узнать, почему это происходит именно так!