Indesign和Extendscript:多功能,循环和定时。循环调用函数,不同步

时间:2019-05-16 13:50:28

标签: javascript adobe adobe-indesign extendscript

关键问题是循环中的功能不同步。除非我包含alert()来减慢该过程,否则我不会得到正确的var myDimensions。我不确定是否需要使用回调。我阅读了有关它们的内容,发现它们令人困惑,并且我想避免回调地狱。发生的事情是,在循环中运行某个函数时,我的其他一些函数调用不同步。 我正在将此JavaScript作为Adobe InDesign的Extendscript编写,因此Extendscript不包括现代JS。

在函数中添加alert()以返回值以确认我获得了正确的值后,我发现了计时问题。如果添加alert(),则会导致延迟,从而使代码正确运行。当我删除alert()时,它再次失败。为了简洁起见,我尝试简化代码,而不是粘贴完整的1,500行文件。

function calculateSomething(podValue){
  return podValue + 1;
}

function doPodStuff(value){
  return value;
}

function getDimensions(calculation){
  return calculation * 2;
}

function pod(value, count){
  var podStuff;
  var calculation;
  var myDimensions;
  podStuff = doPodStuff(value);
  calculation = calculateSomething(podStuff):
  myDimensions = getDimensions(calculation);
  /* this is where my timing is off and podStuff and calculation get out of sync,
  I determined this after placing an alert(myDimensions) right here If I add the alert(),
  the delay makes it work, when I remove alert() it fails again.
  */
  return myDimensions;
}

function row(value, count){
  var myPod;
  for(var i = 0; i < count; i++){
    myPod = pod(value, 2);
  }
  return myPod;
}

row('foobar', 4);

我的目标是使pod()函数在for()循环中运行,但不会出现混乱。如何同步或确保时间正确?

1 个答案:

答案 0 :(得分:0)

您可以尝试链接您的功能:

function pod(value, count) {
    return getDimensions(calculateSomething(doPodStuff(value))) }

在任何情况下,您都可以使用$.sleep(1000)而不是alert("...")来降低脚本速度。