Как и почему я бы использовал обратные вызовы? Моя интерпретация и нужна уверенность

1

Поэтому сегодня утром я создавал случайные функции обратного вызова с намерением реально заставить его застрять в моем мозгу о том, как и почему я буду использовать их.

Я пришел к выводу, что функция обратного вызова передается как параметр другой функции с намерением использовать данные из первой функции, чтобы что-то сделать в функции обратного вызова? Дайте мне знать, если моя интерпретация имеет смысл, или если я покину вас.

И я бы использовал эти функции обратного вызова для того, чтобы ждать данных, необходимых из другой функции, чтобы сделать мой обратный вызов?

Для меня это кажется самой странной, но самой сложной концепцией. Мне нравится 1 день, когда я чувствую себя уверенно, а потом через неделю снова запутался.

  • 0
    Современный подход заключается в предпочтении использовать обещания, а не обратные вызовы, но это также зависит от варианта использования, для которого вы не предоставили ни одного
  • 0
    @charlietfl Кстати, обещания используют обратные вызовы.
Показать ещё 1 комментарий
Теги:

3 ответа

1
Лучший ответ

Интерпретация правильна. Обратный вызов - это функция, которая используется для переадресации, как следует из названия:

function callMeBackPleaseAndSayWakeUp(phrase) {
  say(phrase);
}

function aFriendWhoLovesToWorkAsAHumanAlarm(timeSpan, callback) {
  setTimeout(() => callback('Wake up'), timeSpan);
}

aFriendWhoLovesToWorkAsAHumanAlarm(60 * 60 * 9, callMeBackPleaseAndSayWakeUp);

Обратные вызовы являются базовыми механизмами для слабосвязанных частей приложения для взаимодействия друг с другом.

  • 0
    этот действительно забил мне дом, спасибо!
  • 0
    Рад, что это помогло.
0

Представьте себе некоторую функцию, которая требует времени для завершения, например, setTimeout внутри функции, поэтому вы хотите запустить другую функцию после завершения setTimeout. Вы не можете сделать это с помощью только функции вызова один за другим, потому что он только начнет обратный отсчет и перейдет к следующей функции. Поэтому вам нужно сделать функцию внутри этого setTimeout и передать функцию в качестве аргумента при первом вызове функции обратного вызова AKA.

Теперь вы бы подумали: "Но я могу просто вставить блок кода внутри функции setTimeout

function doItAfterMinute(){
    setTimeout(()=>{
        //block of code
    },60000)
}

Правда, но что, если через минуту у вас будет 10 различных функций, вы не будете делать 10 функций setTimeout с 10 разными именами? Это тот случай, когда обратный вызов показывает свою мощность.

function doItAfterMinute(cb){
    setTimeout(()=>{
        cb()
    },60000)
}

doItAfterMinute(()=>{ console.log('hey, minute passed!)) doItAfterMinute(()=>{ console.log('hey, another minute!))

  • 0
    Общий шаблон обратного вызова не связан с асинхронным или синхронизированным: единственное, что делает шаблон обратного вызова шаблоном обратного вызова, это то, что вместо отправки сигналов обратно вызывающей функции, эта функция вместо этого отправляет свои сигналы (или различным). функция (и) обратного вызова.
0

И я бы использовал эти функции обратного вызова для того, чтобы ждать данных, необходимых из другой функции, чтобы сделать мой обратный вызов?

Это один из распространенных вариантов использования: вы ждете данных, которые будут недоступны до некоторого будущего времени.

Другой вариант использования: вам просто нужно уведомление о том, что что-то произошло. Процесс успешно завершен (или безуспешно), и вы хотите обновить интерфейс.

Еще один: вам нужно сообщить, что прошло некоторое время. setTimeout() и setInterval() - прекрасные примеры.

Чтобы попробовать, поднимите консоль в своем браузере (⌘-Alt-I на Mac, Ctrl-Shift-I или что-то еще на других машинах) и введите следующее:

setTimeout(() => console.log("Two seconds later"), 2000);

и через две секунды...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню