所以我有这个功能,我想运行:
const normal = () => {
return 'working
}
我可以记录它的输出,它工作正常:
console.log(normal()) // does output: 'working'
现在我想运行一个与delayed
完全相同的函数normal
,只需要3秒才能返回
我希望能够记录此函数调用,但仅在3秒之后,我可以理解的是此时正在记录undefined
并且感觉可能会这样做。无论如何我想要发生以下事件,挂起3秒的函数,然后返回数据:
console.log(delayed()) // should output: 'working'
我的尝试:
const toReturn = () => {
return 'working'
}
const runner = (cb) => {
setTimeout(cb, 1000)
}
export const delayed = () => {
return runner(toReturn)
}
console.log(delayed()) // currently outputting: undefined
undefined是因为我没有从跑步者那里返回任何东西,如果我在跑步者中return setTimout...
,我只是得到整个setTimout函数,这是没用的。
我知道你可以在一个回调中简单地记录3秒,但是我想记录从setTimeout返回的内容
答案 0 :(得分:0)
当您拨打console.log
(或其他任何内容)时,它会采取该行动。 JS与某些暂停代码执行的语言不同。
如果您希望console.log
延迟,则需要将实际呼叫延迟至console.log
,而不是返回您正在记录的值。
最简单的方法是:
function delayedLog(seconds)
{
setTimeout(function(){
var val = getSomething(); // <- pretend this returns "later"
console.log(val); // <- after 3 seconds logs "later"
}, seconds*1000);
}
console.log('now');
delayedLog(3);