我有一个功能:
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')
})()