2016-04-20 2 views
-1

Так я эту функцию, которую я хотел бы работать:Функция возврата через 3 секунды

const normal =() => { 
    return 'working 
} 

Я могу войти свою продукцию и она отлично работает:

Теперь я хотел бы выполните функцию delayed, которая точно такая же, как normal, только за 3 секунды до возвращения

Я хотел был бы иметь возможность зарегистрировать этот вызов функции, но только после 3 секунд, я u в настоящее время регистрируется 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 

неопределенными, потому что я ничего от бегуна не возвращаются, если я 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); 
Смежные вопросы