Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同步Javascript示例_Javascript - Fatal编程技术网

同步Javascript示例

同步Javascript示例,javascript,Javascript,我想要一个同步javascript的例子 假设我有三个函数 fun1(); fun2(); fun3(); 他们都记录了一些数据。但是我希望第二个函数fun2()将脚本暂停5秒钟,然后继续 由于是异步的,所以执行setTimeout不起作用。Javascript是单线程语言,因此默认情况下,所有任务都是同步的。因此,在func2之后将调用func3 但是如果在func2中有任何异步任务,如setTimeout或XHR,则序列将中断 在这种情况下,您有两个选项,即回调和承诺 函数func1()

我想要一个同步javascript的例子

假设我有三个函数

fun1();
fun2();
fun3();
他们都记录了一些数据。但是我希望第二个函数fun2()将脚本暂停5秒钟,然后继续


由于是异步的,所以执行setTimeout不起作用。

Javascript是单线程语言,因此默认情况下,所有任务都是同步的。因此,在
func2
之后将调用
func3

但是如果在
func2
中有任何异步任务,如
setTimeout
XHR
,则序列将中断

在这种情况下,您有两个选项,即
回调
承诺

函数func1(){
var num=0;
对于(变量i=0;i<1000;i++){
num+=i;
}
log('func1:',num);
}
函数func2(){
var num=0;
对于(变量i=0;i<1000000;i++){
num+=i;
}
log('func2:',num);
}
函数func3(){
var num=0;
对于(变量i=0;i<10000;i++){
num+=i;
}
log('func3:',num);
}
func1();
func2();

func3()Javascript尽力避免阻塞事件循环。因此,编写一个在给定时间内故意阻塞循环的函数是非常不自然的

话虽如此,但只有在您承诺绝不将其用于演示以外的任何用途时,您才能这样做:

function fun1(){
  console.log("done in fun1")
  return
}

function fun3(){
  console.log("done in fun3")
  return
}

function fun2(){
  var then = new Date().getTime() + 5000; 

  // wait five seconds the hard way

  while(new Date().getTime() < then) {
  };
  console.log("done in fun2")
  return
}

fun1()
fun2()
fun3()
函数fun1(){
console.log(“在fun1中完成”)
返回
}
函数fun3(){
console.log(“在fun3中完成”)
返回
}
函数fun2(){
然后var=newdate().getTime()+5000;
//艰难地等待五秒钟
while(new Date().getTime()
这可能会对您有所帮助:这是异步的。我想要同步的。是的。只是为了演示。@krv为什么要同步呢。即使您可能会完全阻塞浏览器窗口5秒钟,这一方面对用户体验不利,因为用户无法再做任何事情,最糟糕的是,它还可能在浏览器中触发长时间运行的脚本警告,询问用户是否应该停止脚本。相信我,您不希望将所有内容暂停5秒。应该指出的是,
while(new Date().getTime()
将导致一个内核的cpu使用率为100%,持续5秒。