В JavaScript выполнить функцию, когда первая функция готова - PullRequest
0 голосов
/ 01 мая 2010

Есть ли способ, в javascript, вызвать другую функцию, когда первая функция "готова"

как то так:

ridiculousTimeConsumingFunction().onReady( newFunction() );

Чтобы проиллюстрировать мой пример, вы можете взглянуть на нее: http://web.cinaird.se/pdf/test.htm

Ответы [ 4 ]

4 голосов
/ 01 мая 2010

ridiculousTimeConsumingFunction (); newFunction ();

Выполнит newFunction() после завершения ridiculousTimeConsumingFunction().

Вы также можете сделать что-то вроде ridiculousTimeConsumingFunction(newFunction);, и функция ridiculousTimeConsumingFunction определяется следующим образом:

function ridiculousTimeConsumingFunction(callback) {
   for (var i=0;i<1000000000;i++) {

   };

   callback();
}

Что бы иметь тот же эффект.

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

function longFunction (callback) {
  setTimeout(function(){
    $(".theDiv").css('height', 200 );
    callback();
  }, 1000);
}

Тогда назовите это следующим образом:

longFunction(function () {
      $("#info").html(info);
});
1 голос
/ 01 мая 2010

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

function asyncFunc(callback) {
  setTimeout(function() {
    doSomething();
    callback();
  }, 1000);
}

asyncFunc(function() {alert('Done!');}
0 голосов
/ 01 мая 2010

В вашем примере функция "ridiculousTimeConsumingFunction" на самом деле не требует много времени для выполнения: она просто запланировала еще одну функцию для запуска на 1 секунду в будущем.

Если вы хотите сделать что-то подобное, я бы посоветовал вам проверить API эффектов jQuery . Это позволяет вам «связывать» анимации вместе одну за другой и получать желаемый эффект.

0 голосов
/ 01 мая 2010

Если вы имеете в виду ready , когда DOM готов, такого события нет, однако вы можете использовать ready обработчик jQuery для запуска вашей функции когда DOM станет готовым.

С помощью Javascript вы можете запустить свою функцию в событии load, например, так:

window.onload = function(){
  // your function code here
};

Или

window.onload = somefunction;
...