JavaScript:停止执行直到延迟结束
我的代码如下:-JavaScript:停止执行直到延迟结束,javascript,settimeout,Javascript,Settimeout,我的代码如下:- function doStuff(){ // Note:- this funcion take 50ms for ececution as i have put // timeout setTimeout(function(){ // some line of code .... }, 50); return; } doStuff(); console.log('This should execute
function doStuff(){
// Note:- this funcion take 50ms for ececution as i have put
// timeout
setTimeout(function(){
// some line of code
....
}, 50);
return;
}
doStuff();
console.log('This should execute after doStuff() complete its work.")
// after that more many lines of code and more stuff are here
.....
.....
- 现在我想要的是,正如您在这里看到的,doStuff()需要50毫秒的时间来执行,所以doStuff()之后的代码应该在doStuff()完成它的工作之后执行。例如,该控制台应在doStuff()完成后打印
- 请注意,我知道我可以在那里设置超时,但我不能设置超时,因为我在一个开源项目上工作,所以我不能更改在函数调用之后编写的代码,我甚至不能等待承诺,因为我告诉过我不能更改代码,我能做的就是更改我创建的doStuff方法。有没有什么方法可以阻止doStuff()返回,比如doStuff()在延迟结束之前不应该返回,一种方法是我们可以递归调用doStuff,但我想要更好的方法。请帮帮我
- 您需要使用回调或承诺。下面是一个承诺的例子:
函数doStuff(){
var承诺=新承诺((解决)=>{
//注意:-如我所说,此函数需要50毫秒执行
//超时
setTimeout(函数(){
//某行代码
解决();
}, 1000);
});
回报承诺;
}
异步函数main(){
console.log('Start');
等待多斯塔夫();
log('这应该在doStuff()完成其工作后执行');
}
main()代码>您需要使用回调或承诺。下面是一个承诺的例子:
函数doStuff(){
var承诺=新承诺((解决)=>{
//注意:-如我所说,此函数需要50毫秒执行
//超时
setTimeout(函数(){
//某行代码
解决();
}, 1000);
});
回报承诺;
}
异步函数main(){
console.log('Start');
等待多斯塔夫();
log('这应该在doStuff()完成其工作后执行');
}
main()
等待
一个承诺
在超时结束时解决(或调用。然后
打开DOSTAUF
一次DOSTAUF
返回承诺
)是的,我知道,但我不能等待,我不能触摸DOSTAUF()之后编写的代码,因为我必须将所有内容移到DOSTAUFF()。然后(函数(){//HERE})我不能这么做如果你不能改变调用doStuff
的块,那么你所要求的是不可能的。不要害怕使用。那么
我知道,但我们可以通过递归来欺骗它,这也不是不可能的:等待
一个承诺
在超时结束时解决(或者调用。doStuff
上的一次doStuff
返回承诺
)是的,我知道,但我等不及了,我也不能碰在doStuff()之后写的代码,因为我必须将所有内容移动到doStuff()。然后(函数(){//HERE})如果你不能更改调用doStuff
的块,那么你所要求的是不可能的。不要害怕使用。那么
我知道,但我们可以通过递归来欺骗它,这也不是不可能的:)