对设置超时的函数如何反应



我有一个功能:

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

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

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

我找到的唯一方法是在callstack的对象上以相同的方式发送函数

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

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

函数'a'不可编辑

可以使用"callback"a()对另一个函数的引用函数。例子:

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

如果你有参数传递给回调()调用时,可以使用apply()或call()或bind()展开运算符(…)例子:

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')
})()

相关内容

  • 没有找到相关文章

最新更新