Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.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 为什么在使用异步等待语法时仍必须等待while循环?_Javascript_Asynchronous_While Loop_Async Await - Fatal编程技术网

Javascript 为什么在使用异步等待语法时仍必须等待while循环?

Javascript 为什么在使用异步等待语法时仍必须等待while循环?,javascript,asynchronous,while-loop,async-await,Javascript,Asynchronous,While Loop,Async Await,我试图深入理解asyncwait语法。所以我写了一些代码来说明我对asyncwait的了解。这是我的密码: doSomething(); doFirst(); 异步函数doSomething(){ const result=等待堆栈(); 控制台日志(结果); } 函数doFirst(){ console.log('first'); } 函数stackUp(){ 设计数器=0; 而(计数器

我试图深入理解
asyncwait
语法。所以我写了一些代码来说明我对
asyncwait
的了解。这是我的密码:

doSomething();
doFirst();
异步函数doSomething(){
const result=等待堆栈();
控制台日志(结果);
}
函数doFirst(){
console.log('first');
}
函数stackUp(){
设计数器=0;
而(计数器<4000000000){
计数器++;
}
返回计数器;

}
Async await实际上不允许多线程处理JS代码。默认情况下,它仍然同步运行,但等待的任何内容都将附加到它等待的承诺的回调中。如果您想运行真正多线程的JS,您必须将运行在webworker主线程之外的代码放在webworker中,并等待基于与webworker通信的承诺


TLDR;您不能直接对多线程JS进行处理,因为异步/等待的行为与同步代码执行类似,这就是为什么它的控制台同时处理两个输出

异步方法执行转到回调队列。回调队列与事件循环一起执行回调函数

非回调函数(doFirst)将转到主调用堆栈


在主调用堆栈的代码执行之后,它将借助事件循环执行回调队列,如果回调队列有代码要执行,则它会将消息从它弹出到主堆栈以执行。

是的,这就是为什么会发生这种情况<代码>等待暂停包含它的函数,并告诉承诺恢复它–它不会启动线程或任何东西。如果你根本不涉及承诺,比如在本例中,它什么也不做。我有办法异步运行while循环吗?如果Node.js,在单独的进程中使用集群或子进程,或者使用
--实验工作者
工作者线程。工作者
。如果是浏览器,请使用web worker。(您也可以在工作时偶尔向事件循环屈服,但这通常不是一个好主意。)哦,我理解。多谢各位