提问者:小点点

用于多个用户节点的Asyc函数。js


因为i是一个以上用户访问的全局变量,那么在user1执行完所有代码之后,user2是否会启动? 如何工作Node.js单线程?

输出:

6
A
承诺{未定义}
7
7
er

var i=5;

async function a(){
  i++;
  setTimeout(()=>{
    console.log(i);

  })

  console.log(i);

   setTimeout(()=>{
    console.log(i);

  })
  i++;

}

async function b(){

  console.log('a');

  setTimeout(()=>{
    console.log("er");

  })
}


a();
b();

共1个答案

匿名用户

当我们调用一个()。 函数a()被添加到堆栈中。 在()中有setTimeout,它应该由web API处理,web API负责处理它。 然后它在堆栈中看到console.log(i),并打印console.log。 接下来,还有另一个setTimeout,它也被处理到web API。 随后,函数b()被推送到堆栈,它在堆栈中找到console.log(“a”)并进行日志记录,然后找到setTimeout并被推送到web API。 堆栈为空后,它通常返回未定义,但这里函数是异步的,因此它返回未定义的承诺。 稍后,当事件队列看到堆栈为空时,它会在setTimeout内部分配代码加载到堆栈中,然后执行,执行后弹出。