16 votes

Y a-t-il un équivalent de setTimeout dans ExtendScript d'Adobe ?

La fonction setTimeout de Javascript est une méthode de l'objet window. Cet objet n'existe pas dans ExtendScript et n'est donc pas disponible pour les scripts créés pour Adobe InDesign ou Illustrator. Que puis-je utiliser à la place pour obtenir les mêmes résultats?

22voto

pdizz Points 1427

Cela fait partie de l'objet $ d'extendscript.

$.sleep(1000) //indique à extendscript de dormir pendant 1000 millisecondes

Différent de setTimeout() mais vous devriez pouvoir le faire fonctionner pour vous.

MODIFICATION : Voici l'extension setTimeout pour extendscript :

$.setTimeout = function(func, time) {
        $.sleep(time);
        func();
};

$.setTimeout(function () {alert("bonjour tout le monde")}, 3000);

4voto

Davide Barranca Points 300

Il existe une implémentation de setTimeout ExtendScript ici (site allemand, avec du code commenté en anglais), mais comme cela dépend de app.idleTasks, cela fonctionne uniquement dans InDesign (pas dans Photoshop).

Je colle ici le code téléchargeable trouvé dans le lien ci-dessus (© Andreas Imhof) :

/**
 * setTimeout
 * Version 1.0
 * Implémentation de la fonction setTimeout pour InDesign ExtendScript comme on la connaît en Javascript d'un navigateur.
 * Utilise les tâches inactives d'InDesign.
 * Les millisecondes du délai ne sont pas précises, mais cela permet d'appeler un script lourd,
 * de le découper en petits morceaux pour éviter que InDesign ne soit bloqué trop longtemps et ait le temps de respirer.
 *
 * Le script DOIT s'exécuter dans son moteur cible dédié :
 * #target "InDesign"
 * #targetengine "myOwnEngineName"
 *
 * AVERTISSEMENT :
 * Aucune garantie - utilisez tel quel ou modifiez mais conservez les coordonnées de l'auteur :
 * CopyRight Andreas Imhof, www.aiedv.ch, ai@aiedv.ch
 */
// [...]

1voto

GuZ Points 21

En utilisant Adobe After Effects, l'utilisation de $.sleep(temps) provoquera l'arrêt du script.

Utilisez plutôt le app.scheduleTask(stringToExecute, délai, répéter) natif dans ExtendScript:

Exemple:

var taskId = app.scheduleTask(function () {alert("bonjour tout le monde")}, 1500, false);

Pour annuler:

app.cancelTask(taskId);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X