2016-04-20 50 views
-1
后返回

所以我有这个功能,我想运行:功能3秒

const normal =() => { 
    return '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...在runner中,我只是得到了整个setTimout函数,这是相当无用的。

我知道你只需登录一个回调在3秒后,但我想记录的内容是从setTimeout的

+2

你的意思是,锁定用户浏览器3秒?当然你可以做到!但不要期待任何积极的反馈。这会使系统无响应并破坏用户的工作。 –

回答

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);