Ако искаме да върнем нещо от функция, която използва асинхронен код, така:

const geocode = (address, callback) => {setTimeout(() => {
const data = {latitude : 0, longitude : 0return data};
},2000);
};
geocode(‘Philadelphia’);

Тук искаме да изчакаме две секунди, преди данните да бъдат върнати, тъй като са обвити вътре във функцията setTimeout.

Това обаче не е това, което искахме. Това ще върне недефинирано, тъй като се връщаме вътре в setTimeout, а не от самата функция за геокодиране, където сме извикали.

За да коригираме този проблем, можем да използваме функция за обратно извикване. Това ще направи същото като връщане от функция, но ни позволява да изчакаме две секунди, преди да получим нещо обратно.

const geocode = (address, callback) => {
setTimeout(() => {const data = {latitude : 0, longitude : 0
};
callback(data);
}, 2000);
};
geocode(‘Philadelphia’, (data) => {
console.log(data);
});

Тук получаваме това, което искахме, двете секунди минават и функцията за обратно извикване се извиква връщане на обекта с данни.