我有一个文本字段,我想一次推出一个单词。单词是在一个数组中。要显示的单词之间的延迟设置为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
。那就是i ++ = 3
为什么呢?我该如何解决这个问题?
答案 0 :(得分:0)
在延迟之前致电do (i) ->
以确保将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