Regarde ça code :
<a href="#" id="link">Link</a>
<span>Moving</span>
$('#link').click(function () {
console.log("Enter");
$('#link').animate({ width: 200 }, 2000, function() {
console.log("finished");
});
console.log("Exit");
});
Comme vous pouvez le voir dans la console, la fonction "animate" est asynchrone, et elle "bifurque" le flux de code du bloc du gestionnaire d'événement. En effet :
$('#link').click(function () {
console.log("Enter");
asyncFunct();
console.log("Exit");
});
function asyncFunct() {
console.log("finished");
}
suivez le flux du code-bloc !
Si je souhaite créer mon function asyncFunct() { }
avec ce comportement, comment puis-je le faire avec javascript/jquery ? Je pense qu'il existe une stratégie sans l'utilisation de setTimeout()
0 votes
Jetez un coup d'œil aux sources de jQuery :)
0 votes
Le mathod .animate() utilise un callback. Animate appellera la callback lorsque l'animation sera terminée. Si vous souhaitez obtenir le même comportement que .animate(), vous avez besoin d'un callback (appelé par la fonction "main" après d'autres opérations). C'est différent si vous avez besoin d'une fonction asynchrone "complète" (une fonction appelée sans bloquer le flux d'exécution). Dans ce cas, vous pouvez utiliser setTimeout() avec un délai proche de 0.
0 votes
@Fabio Buda : pourquoi callback() devrait implémenter une sorte d'asynchrone ? En fait, ce n'est pas le cas jsfiddle.net/5H9XT/9
0 votes
En fait, après "callback", j'ai cité une méthode asynchrone "complète" avec setTimeout. Je voulais dire callback comme pseudo-async dans la façon dont la fonction est appelée après un autre code :-)