3秒后返回的功能

时间:2016-04-20 21:45:55

标签: javascript asynchronous callback promise settimeout

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

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返回的内容

1 个答案:

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