Adobe'中是否有与setTimeout等效的设置;s扩展脚本

Adobe'中是否有与setTimeout等效的设置;s扩展脚本,adobe,settimeout,extendscript,adobe-indesign,Adobe,Settimeout,Extendscript,Adobe Indesign,Javascript的setTimeout函数是窗口对象的一种方法。ExtendScript中不存在此对象,因此对于为Adobe InDesign或Illustrator制作的脚本不可用。我可以使用什么来获得相同的结果呢?它是extendscript的$对象的一部分 $.sleep(1000) //tell extendscript to sleep 1000 milliseconds 与setTimeout()不同,但您应该能够让它为您工作 编辑:以下是extendscript的setTim

Javascript的
setTimeout
函数是
窗口
对象的一种方法。ExtendScript中不存在此对象,因此对于为Adobe InDesign或Illustrator制作的脚本不可用。我可以使用什么来获得相同的结果呢?

它是extendscript的
$
对象的一部分

$.sleep(1000) //tell extendscript to sleep 1000 milliseconds
与setTimeout()不同,但您应该能够让它为您工作

编辑:以下是extendscript的setTimeout扩展名:

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

$.setTimeout(function () {alert("hello world")}, 3000);

有一个setTimeout ExtendScript实现(德语站点,代码用英语注释),但由于它依赖于
app.idleTasks
,因此它只能在InDesign中工作(没有Photoshop)

我将上面链接中的可下载代码粘贴到这里(©Andreas Imhof):

/**
*设置超时
*版本1.0
*一个用于InDesign ExtendScript的setTimeout函数实现,类似于浏览器的Javascript。
*使用InDesign的idleTask内容。
*超时毫秒不准确,但允许调用重载脚本,
*把它分成小块,因为InDesign不会阻塞太长时间,有时间呼吸。
*
*脚本必须在其专用目标引擎中运行:
*#目标“InDesign”
*#目标发动机“myOwnEngineName”
*
*免责声明:
*无保修-按原样使用或修改,但保留发起人的坐标:
*版权所有Andreas Imhof,www.aiedv.ch,ai@aiedv.ch
*/
//
var setTimeout\u Task\u curfile=新文件($.fileName),
setTimeout\u Task\u curfullname=decodeURI(setTimeout\u Task\u curfile.name),
//setTimeout\u Taskname必须是唯一的名称,因此我们从当前运行的脚本中获取它!!
//可以设置为任何字符串,如
//setTimeout_Taskname='myownstask';
setTimeout\u Taskname=setTimeout\u Task\u curfullname.lastIndexOf(“.”)是否大于0?(setTimeout\u Task\u curfullname.substr(0,setTimeout\u Task\u curfullname.lastIndexOf(“.”)):setTimeout\u Task\u curfullname,
setTimeout_Tasks={},//准备运行的所有已定义任务
/**
*setTimeout_hasIdleTask
*效用函数
*@param{Number}超时任务id
*@return{Boolean}true,如果给定的超时id也有其附加的idleTask
*/
setTimeout\u hasIdleTask=函数(id){
var has=假,i;
对于(i=0;inow_ticks){//我们还没有到达超时
//NA:logmess(“setTimeoutHandler id”+taskid+”太早了,由ms:“+(setTimeout\u任务[taskid][“结束\u记号”]-现在\u记号)+”\n”);
//警报(“setTimeoutHandler id”+taskid+”太早,由ms:”+(setTimeout_任务[taskid][“结束_标记”]-现在标记));
setTimeout_Tasks[taskid][“numcalls”]+=1;
return false;//等待下一个调用
}
}
捕获(ex){
警报(“函数'setTimeoutHandler()'中的异常(1),taskid“+taskid+”:\n”+ex);
}
试一试{
cb=setTimeout_Tasks[taskid][“cb”];//存储回调
clearTimeout(taskid);//删除超时
}
捕获(ex){
警报(“函数'setTimeoutHandler()'中的异常(2),taskid“+taskid+”:\n”+ex);
}
试一试{
//NA:logmess(“setTimeoutHandler调用”+cb+“\n”);
cb_retval=cb();//调用cb
//if(cb_retval)警报(“cb_retval:\n”+cb_retval);
}捕获(ex){
警报(“函数'+cb()+“:\n”+ex中出现异常”);
}
返回false;
},
/**
*设置超时
*将函数设置为在给定超时后调用
*@param{function}回调要调用的函数
*@param{Number}超时(毫秒)
*@return{Boolean}null出错,否则id(可与clearTimeout一起使用
*/
setTimeout=函数(回调,超时){
试一试{
var idle_任务,
现在_Ticks=newdate().getTime();
idle_Task=app.idleTasks.add({sleep:timeout});
idle_Task.label=setTimeout_Taskname;
setTimeout\u任务[idle\u Task.id]={
“标签”:setTimeout_Taskname,
“开始滴答声”:现在滴答声,
“睡眠”:超时,
“结束滴答声”:现在滴答声+超时,
“cb”:回调,
“任务ID”:空闲任务。
var taskId = app.scheduleTask(function () {alert("hello world")}, 1500, false);
app.cancelTask(taskId);