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设置为 last的行时i。即 i++ = 3

为什么?我该如何解决?

4

1 回答 1

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
于 2017-08-29T12:07:46.737 回答