В JavaScript выполнить функцию, когда первая функция готова

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

что-то вроде этого:

ridiculousTimeConsumingFunction().onReady( newFunction() );

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

4 ответа

Решение

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);
});

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

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

asyncFunc(function() {alert('Done!');}

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

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

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

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

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

Или же

window.onload = somefunction;
Другие вопросы по тегам