Carduelis
@Carduelis
Web-developer, front-end, js, less

Как выполнить функцию, которая является параметром другой функции в нужное время в javascript?

Доброго, мой дорогой javascript-гуру
Есть вот такой код у меня:
var level = parseRoomName(roomId).level;
    if (!svgAction.isExisted(level)) {
      svgAction.ajaxLoad(level);
      loadSvg.success(function(){
        svgAction.enablePanZoom(level);
        // 
        findRoom(roomId);
      })
    } else {
      if (lastSvgLevel == level) {
        // 
        findRoom(roomId);
      } else {
        svgAction.enablePanZoom(level);
        // 
        findRoom(roomId);
      }
    }

чтобы он проще читался - перепишу, убрав лишнее
if (iHaveNoCar) { // у меня нет машины
      buyCar(); // ajax-запрос на покупку машины
      buyingCar.success(function(){ // машина купилась успешно и теперь она у меня
        // заводим машину
        start(car);
        // едем искать Эльдорадо
        findEldorado();
      })
    } else {// у меня есть машина
      if (carIsStarted) { // машина заведена
       // чего же мы ждем? Поехали искать Эльдрадо
       findEldorado();
      } else {  // двигатель не запущен
        start(car);
        // едем искать Эльдрадо
        findEldorado();
      }
    }


Так вот, кусок кода с поиском Эльдорадо, которому предшествуют покупка машины и заведение двигателя, вызывается не раз по ходу выполнения программы.

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

Но когда я пишу функцию

function initCar(myFunc) {
if (iHaveNoCar) {
      buyCar();
      buyingCar.success(function(){
        start(car);
        myFunc;
      })
    } else {
      if (carIsStarted) {
       myFunc;
      } else { 
        start(car);
        myFunc;
      }
    }
}


и когда я ее запускаю вот так:

initCar(findBulletInDoor('left'))
то сначала выполняется поиск дырок в левой двери, а только потом проверка на наличие автомобиля, его покупку, доставку и заведение двигателя.
Как выполнить findBulletInDoor('left') внутри initCar так, как это выполнилось бы в первом примере кода про машину?
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
Заменить в функции InitCar
myFunc;
на
myFunc();
и вызывать вот так:
initCar(function(){
    findBulletInDoor('left');
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы