我目前正在遇到此问题,在此示例中,我想慢慢显示一个字,我想显示“你好,我的名字是...”,但它应该这样记录:
“ 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);
答案 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);