2017-08-28 70 views
0

我有一个文本字段,我想一次推出一个单词。这些单词是在一个数组中。要显示的单词之间的延迟设置为1秒。第一个字显示2秒。因此,奇怪的双重陈述。在成帧器中延迟迭代

msgArray = [ 
    ["Hello", "World"], 
    ["89:23", "Tom Eriksen","Scooores!!"], 
    ["Overtime", "about to", "start"]] 

printMessageLoop = (msgArray, target) -> 
target.text = msgArray[0] 
timeToRead = 1 
Utils.delay timeToRead,() -> 
    for i in [1..msgArray.length-1] 
     Utils.delay timeToRead*i,() -> 
      target.text = msgArray[i] 
      print "i="+i #debugging purpose 

当我打电话printMessageLoop(msgArray[2])target显示的第一个字正确的,但最后两个是“不确定”。打印输出说:

printMessageLoop(msgArray[2]) 

»i=3 
»i=3 

看来当行target.text = msgArray[i]被执行i被设置为最后i等。那是我++ = 3

为什么?我该如何解决它?

回答

0

呼叫do (i) ->延迟之前,为了确保我的当前值被转发到未来的指令

printMessageLoop = (msgArray, target) -> 
target.text = msgArray[0] 
timeToRead = target.text.length/20 * readingSpeed 
Utils.delay timeToRead,() -> 
    for i in [1..msgArray.length-1] 
     do (i) -> 
      Utils.delay timeToRead*i,() -> 
       target.text = msgArray[i ] 
       print "i="+i 
       timeToRead = target.text.length/20 * readingSpeed