Вы что-то путаете, либо не понимаете чем отличаются понятия
синхронно и
асинхронно. Функция итак выполняется асинхронно, поэтому выполнение продолжается до ее завершения, иначе бы вызов
console.log(result) происходил в конце. Вызывайте
console.log(result) в колбеке, это самый оптимальный вариант.
Если все-таки хотите вызывать по порядку, то используйте
async/await.
Для этого сделайте обертку над своей функцией:
const calculateAndDisplayRoute = callback => new Promise((resolve, reject) => {
var waypts = [];
return this.directionsService.route({
origin: "Аэропорт, Республика Башкортостан, Россия",
destination: $('#address_to').val(),
waypoints: waypts,
optimizeWaypoints: true,
travelMode: 'DRIVING'
}, (response, status) => {
if (status === 'OK') {
resolve(callback(response, status));
}
reject(status);
});
});
и вызывайте все это дело в асинхронной функции:
async function run() {
try {
await calculateAndDisplayRoute((response, status) => {
console.log(status);
result = status;
this.directionsDisplay.setDirections(response);
return true;
});
console.log(result);
} catch (e) {
console.log(e);
}
}
Вместо колбеков удобней использовать промисы.