Обратные вызовы необходимы, когда значение зависит от ответа на обещание. Часто, когда мы запрашиваем данные из других источников, таких как внешний API, мы не всегда знаем, когда наши данные будут возвращены.
Я думаю, что ваш пример имеет в виду что-то вроде этого:
function download(url, callback) {
console.log(`Downloading ${url} ...`);
fetch(url)
.then((response) => {
callback(null, response)
})
.catch((error) => {
callback(err, null)
});
}
download("http://example.com/movies.json", function(err, response){
// Do something with the response data
});
Разве я не могу просто создать другую функцию и вызвать эту функцию из функции загрузки?
Было бы более разумно передать другую функцию в качестве обратного вызова, например:
function handleMovieData(err, response) {
// Do something with the response data
}
download("http://example.com/movies.json", handleMovieData);
Комментарий Ника Парсонса объясняет это хорошо
РЕДАКТИРОВАТЬ : В качестве альтернативы функции обратного вызова можно использовать асинхронное / ожидание (не проверено)
async function download(url) {
console.log(`Downloading ${url} ...`);
return new Promise(function(resolve, reject) {
fetch(url)
.then((response) => {
resolve(response)
})
.catch((error) => {
reject(err)
});
})
}
const movieData = await download("http://example.com/movies.json");
handleMovieData(movieData);