Что такое обратный звонок? - PullRequest
       15

Что такое обратный звонок?

4 голосов
/ 26 декабря 2009

Это функция?
Это функция вызывается из источника?
Или это функция, возвращаемая из пункта назначения?
Или это просто выполнение функции в месте назначения?
Или это значение, возвращаемое функцией, переданной в место назначения?

Ответы [ 2 ]

17 голосов
/ 26 декабря 2009

Обратный вызов - это строительный блок асинхронной обработки.

Подумайте об этом так: когда вы звоните кому-то, а он не отвечает, вы оставляете сообщение и свой номер телефона. Позже, человек перезванивает вам на основании номера телефона, который вы оставили.

Обратный вызов работает аналогичным образом. Вы запрашиваете API для длительной операции и предоставляете метод из своего кода, который будет вызван с результатом операции. API выполняет свою работу, и когда результат готов, он вызывает ваш метод обратного вызова.

11 голосов
/ 26 декабря 2009

Из великой Википедии :

В компьютерном программировании обратный вызов исполняемый код, который передается как аргумент в другой код. Это позволяет нижний уровень программного уровня, чтобы вызвать подпрограмма (или функция), определенная в слой более высокого уровня.

Говоря иначе, когда вы передаете обратный вызов своему методу, это как если бы вы давали дополнительные инструкции (например, что вы должны делать дальше). Вот попытка сделать простой человеческий пример:

  1. Краска эта стена этот оттенок зеленый (где «краска» аналогична вызываемому методу, а «стена» и «зеленый» похожи к аргументам).
  2. Когда вы закончите рисовать, позвоните мне по этому номеру, чтобы сообщить, что вы закончили, и я скажу вам, что делать дальше.

С точки зрения практических применений, одно место, где вы иногда будете видеть обратные вызовы, - это ситуации с асинхронной передачей сообщений. Возможно, вы захотите зарегистрировать конкретное сообщение в качестве объекта интереса для класса B.

Однако без чего-то вроде обратного вызова у класса А нет очевидного способа узнать, что класс В получил сообщение. С помощью обратного вызова вы можете сказать классу B, вот сообщение, которое я хочу, чтобы вы прослушали, и это метод в классе A, который я хочу, чтобы вы вызывали, когда получите его.

Вот Java-пример обратного вызова из соответствующего вопроса.

...