2010-05-01 17 views
0

Est-il possible, en javascript, de faire appel à une autre fonction lorsque la première fonction est « prêt »En javascript, exécuter une fonction lorsque la première fonction est prêt

quelque chose comme ceci:

ridiculousTimeConsumingFunction().onReady(newFunction()); 

Pour illustrer mon exemple, vous pouvez jeter un oeil elle: http://web.cinaird.se/pdf/test.htm

+0

duplication possible de http://stackoverflow.com/questions/1859185/how-to-force-sequential-javascript-execution – outis

Répondre

4

ridiculousTimeConsumingFunction(); newFunction(); Exécutera newFunction() après ridiculousTimeConsumingFunction() est terminée.

Vous pouvez aussi faire quelque chose comme ridiculousTimeConsumingFunction(newFunction);, et ont ridiculousTimeConsumingFunction défini comme suit:

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

    }; 

    callback(); 
} 

qui aurait le même effet.

Enfait, ferraille tout cela, parce que c'est un événement asynchrone, pas un temps fonction ... la consommation Vous devez utiliser un rappel:

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

Ensuite, appelez comme suit:

longFunction(function() { 
     $("#info").html(info); 
}); 
0

Si vous entendez par prêt quand DOM est prêt, il n'y a pas un tel cas, vous pouvez cependant utiliser jQuery'sready gérer votre fonction lorsque DOM est prêt.

Avec Javascript, vous pouvez tirer votre fonction load événement aussi comme ceci:

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

Ou

window.onload = somefunction; 
+0

Deuxième exemple est faux, supprimez le() de 'somefunction' –

+0

@ M28: Vous avez raison , tapé dans une sorte d'habitude, fixe de toute façon. Merci – Sarfraz

1

Le concept de «prêt» n'est généralement pas défini pour les fonctions asynchrones comme votre exemple. Habituellement, ce genre de chose se fait par callbacks:

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

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

Dans votre exemple, la fonction « ridiculousTimeConsumingFunction » ne prend pas en fait tout ce temps pour exécuter: juste prévu une autre fonction pour exécuter 1 seconde dans la avenir.

Si vous voulez faire quelque chose comme ceci, je vous suggère de consulter l'API des effets de jQuery UI. Cela vous permet de "chaîner" des animations les unes après les autres et d'obtenir l'effet désiré.