微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何对设置超时的功能做出反应

如何解决如何对设置超时的功能做出反应

我有功能

function a(){ setTimeout(()=>{console.log('a')},0) }

这个函数调用堆栈的最后发送console.log不是吗?

如何编写一个在此 console.log 之后运行的函数

我发现的唯一方法是以相同的方式在调用堆栈的 of 上发送函数

a();
setTimeout(()=>{ console.log('after a'),0 });

但对我来说看起来很糟糕。我尝试过承诺,但我可以对“a”函数做出反应,而不是在里面的 console.log 上。

函数“a”不可编辑

解决方法

您可以使用“回调”,这是对 a( ) 函数的另一个函数的引用。示例:

function yourFunctionToBeRunnedAfter(){
..
..
}

function a(callback){ 
   setTimeout(()=>{
         console.log('a');
         calback();  // ==> here is your function execution.
    },0);
}

a(yourFunctionToBeRunnedAfter);

如果您有参数要传递给 callback() 调用,则可以使用 apply()call()bind()the spread operator (...) 示例:

function a(callback,...params){  // ... is the spread operator
   setTimeout(()=>{
         console.log('a');
         callback([...params]);  // ==> here is your function execution by spreading your params to the callback call.
    },0);
}
a(yourFunctionToBeRunnedAfter,1,2,3);
,

您需要使用承诺。我建议使用 async-await,但这实际上取决于您的偏好。

function a () {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log('a')
      resolve()
    },0)
  })
}

a().then(() => console.log('after a'))

如果您需要知道超时何时结束,我建议您创建一个辅助函数:

const wait = (time) => new Promise(r => setTimeout(r,time))

然后你可以像这样使用它:

(async () => {
  console.log('Hello')
  await wait(1000) // wait 1 second
  console.log('Hello a second later')
})()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。