2016-04-20 91 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);