Слушатели событий в JavaScript - PullRequest
       7

Слушатели событий в JavaScript

1 голос
/ 04 февраля 2010

Есть ли в javascript слушатели событий?

Мой сценарий:
Я хочу выполнить функцию Inc 2 раза с различными параметрами, сначала выполнение Inc, а затем второе выполнение, но второе выполнение должно быть выполнено через X секунд (settimeout ...) после того, как первая функция Inc завершена (все это итерации, как только clearInterval).

Так что мне нужен вид события и слушатель (конечно, он должен быть асинхронным).
Что ты можешь предложить? (пожалуйста, не спрашивайте ...)

function Inc(val1,val2){                               
     var intervalID = setInterval(function(){
          if (val1 > val2) clearInterval(intervalID);
          val1= val1 + 10;                        
      }, 400);

}

Ответы [ 3 ]

2 голосов
/ 04 февраля 2010

Я обычно стараюсь держаться подальше от таймаутов , особенно если они имеют дело с чем-то, что требует рекурсии.

Но зачем вам рекурсия, если функция выполняется только дважды?*

// call Inc the first time
Inc();

// this will execute only after the first Inc(); is done.
// call Inc the second time after X seconds
setTimeout(Inc, 400);
1 голос
/ 04 февраля 2010

Редактировать: Ну, так как я не знаю, почему вы не хотите, чтобы он знал о продолжении, вот еще одно предложение с точно такой же семантикой, но, возможно, желательным синтаксисом, теперь есть в любом случае имитация делегирования события :) (дело в том, что вам нужна функция Inc, чтобы как-то сообщить о завершении):

function Inc(val1,val2){
    var handle = { oncomplete: null };

    var intervalID = setInterval(function(){

        if (val1 > val2)
        { 
            clearInterval(intervalID);
            if (handle.oncomplete) handle.oncomplete();
        }

        val1 = val1 + 10;

    }, 400);

    return handle;
}

Inc(10, 40).oncomplete = function(){ alert("Finish"); };

Предыдущая: Что-то вроде этого должно быть в фокусе (хотя я не проверял это):

function Inc(val1,val2, continuation){                               
 var intervalID = setInterval(function(){
  if (val1 > val2)
  { 
    clearInterval(intervalID);
    if (continuation) continuation();
  }

  val1 = val1 + 10;                        
 }, 400); }

Тогда назовите это так:

Inc(x, y, function(){ Inc(y, z); });
0 голосов
/ 04 февраля 2010

AFAIK, нет никакого стандартизированного пользовательского события, но вы делаете обходной путь.

Вызов «делегата» таким образом:

var myFunction = function() {
    // CALL Inc with different params, this is your "event"
};

function Inc(val1, val2) {
   setInterval(myFunction,400);
}

Краткий ответ, не для пользовательских событий (только для событий стандарта DOM), но вы можете подделать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...