2017-08-28 51 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