2014-02-26 3 views
0

Возможно ли передать параметр обратного вызова другому методу из самого функционального блока обратного вызова? Пример:Передача функции обратного вызова как параметра из самого себя

var resultCallback = function(result){ 
    if(result) 
    { 
     alert('success!'); 
    }else{ 
     callServiceB(resultCallback); 
    } 
} 

callServiceA(resultCallback); 

Причиной этого является то, я хочу, чтобы тренировки что-то вроде цепочки шаблонов ответственности в JavaScript.

Пробовал поиск в Интернете, но до сих пор ничего не получает. Любая идея или комментарий приветствуются.

+1

Да, вы можете. Ты это пробовал? – Bergi

+0

Однако, как цепочка ответственности ('callServiceB'), так и результирующее действие (' alert ('success!') ') В одной и той же функции представляет собой нечетный/плохой опыт/дизайн запаха. Используйте отдельный обратный вызов для результата. Он может выглядеть так: 'callServiceA (orCallServiceB (alertResult))' или 'либо (callServiceA, callServiceB) (alertResult)' – Bergi

+0

Фактически, в этом случае есть много вызовов другому методу, я упростил его до 2 для краткости. логика аналогична 1. функция вызова a 2. если функция a ok, то функция вызова b 3. если функция b ok, затем вызов функции c и т. д. – ipohfly

ответ

0

Возможно ли передать параметр обратного вызова другому методу из самого функционального блока обратного вызова?

Да, вы можете. Попробуй!

Я хочу тренировки что-то вроде цепочки ответственности моделей

Положив как ответственность цепь (callServiceB(resultCallback)) и в результате действия (alert('success!')) в одной и той же функции выглядит как плохая практика/дизайн запах , Вы должны использовать дополнительный обратный вызов для результата и отделить объявление сети от.

Тогда он может выглядеть как callServiceA(orCallServiceB(alertResult)) или either(callServiceA, callServiceB, …)(alertResult).

Логика как 1. вызова функции A 2. Если функция а нормально, а затем вызвать функцию б 3. Если функция Ь нормально, а затем вызвать функцию с, и так далее .. - ipohfly 8 минут назад

Это не похоже на chain of responsibility, где вы вызываете следующую функцию только в том случае, если текущий сбой (не удалось обработать аргументы)? То, что вы описываете, больше похоже на монадическую цепочку (одно действие, основанное на предыдущем) - взгляните на promises:

callServiceA.then(callServiceB).then(…).then(resultCallback); 
Смежные вопросы