setTimeOut和打字效果

时间:2018-08-24 16:52:15

标签: javascript settimeout

我目前正在遇到此问题,在此示例中,我想慢慢显示一个字,我想显示“你好,我的名字是...”,但它应该这样记录:

“ H”,然后在500毫秒后
“他”然后500毫秒后
然后是“ Hel” ...
“地狱”等...

但所有节目立即显示感谢您的时间。

    function type(string, length) {
        if(length < string.length+1) {
            console.log(string.slice(0, length), length);
            setTimeout(type(string, length+1), 500);
        }
    }
    
    type("hello my name is...", 1);

2 个答案:

答案 0 :(得分:2)

之所以发生这种情况,是因为您没有在参数的位置调用函数,而是将函数作为参数传递了。

您可以使用EventFilter.info("Management consumer started", occurrences = 1) intercept { anotherSystem.actorOf(Props(classOf[Supervisor], new ConfigurationFromStatic(configsAnother), metrics), "AnotherSupervisor") } 来传递带有参数的函数引用。像这样:

with MaxAngle as (
    select DeviceID, RecordedDate, Angle,
        row_number() over
            (partition by DeviceID, cast(RecordedDate as date) order by Angle desc) as rn
    from tblActiveBladeLive
)
select *
from tblActiveList as l left outer join MaxAngle as a
    on      a.DeviceID = l.DeviceID
        and cast(dateadd(day, 10, a.TimeAdded) as date) = cast(l.RecordedDate as date)
        and a.rn = 1;

bind上第一个参数为function type(string, length) { if(length < string.length+1) { console.log(string.slice(0, length), length); setTimeout(type.bind(null, string, length+1), 500); } } type("hello my name is...", 1);。这是因为第一个参数是函数内bind的值。由于未使用,因此可以使用null

答案 1 :(得分:0)

问题在于您没有将正确的第一个参数传递给 setTimeout 。它以函数 reference 作为第一个参数,但是您要传递函数 invocation --您正在调用以便立即运行type,并将type(在您的情况下为undefined)的返回价传递给setTimeout()

如果将函数调用包装在函数声明中,则此问题已解决。

function type(string, length) {

    if(length < string.length+1) {
        console.log(string.slice(0, length), length);
        timer = setTimeout(function(){type(string, length+1)}, 500);
    }
}

type("hello my name is...", 1);