JavaScript异步函数没有';t非块
由于异步函数是非阻塞的,我希望下面代码中的asyncfunc不会阻塞,console.log(a)打印为零JavaScript异步函数没有';t非块,javascript,asynchronous,async-await,nonblocking,Javascript,Asynchronous,Async Await,Nonblocking,由于异步函数是非阻塞的,我希望下面代码中的asyncfunc不会阻塞,console.log(a)打印为零 var a=0; 常量asyncfunc=async()=>{ 对于(设i=0;i{ a=asyncfunc(); 控制台日志(a); 返回true; }; asyncmain(); 但当我执行时,首先运行asyncfunc中的所有代码,然后编写控制台日志。函数首先被异步函数阻塞 预期:0 实际:承诺{2} 我无法理解这个结果。帮助我理解这个结果 ps 我在node.js v10.15.
var a=0;
常量asyncfunc=async()=>{
对于(设i=0;i<100000000;i++){}
a=1;
返回2;
};
const asyncmain=async()=>{
a=asyncfunc();
控制台日志(a);
返回true;
};
asyncmain();
但当我执行时,首先运行asyncfunc中的所有代码,然后编写控制台日志。函数首先被异步函数阻塞
预期:0
实际:承诺{2}
我无法理解这个结果。帮助我理解这个结果
ps
我在node.js v10.15.3上运行了这段代码。如果要使用异步函数的结果,必须使用
wait
子句指定要等待它们使用它
var a=0;
常量asyncfunc=async()=>{
对于(设i=0;i<100000000;i++){}
a=1;
返回2;
};
const asyncmain=async()=>{
a=等待异步函数();
控制台日志(a);
返回true;
};
asyncmain()代码>如果要使用异步函数的结果,必须使用wait
子句指定要等待它们使用它
var a=0;
常量asyncfunc=async()=>{
对于(设i=0;i<100000000;i++){}
a=1;
返回2;
};
const asyncmain=async()=>{
a=等待异步函数();
控制台日志(a);
返回true;
};
asyncmain()
“由于异步函数是非阻塞的”,这是不正确的。异步函数将同步运行,直到它们遇到Wait
。这是否回答了您的问题?简单地说,将async关键字放在函数前面意味着函数返回的任何值都将被包装在承诺中。”因为异步函数是非阻塞的,所以这是不正确的。异步函数将同步运行,直到它们遇到wait
。这是否回答了您的问题?简单地说,将async关键字放在函数前面只是意味着函数返回的任何值都将被包装在一个承诺中。在继续执行console.log
语句之前,这仍然需要asuncfunc
完全执行,但是您不能在不等待的情况下使用a
值。但是OP不是询问如何使用结果,而是询问同步/异步行为。这详细解释了它的工作原理。在继续执行console.log
语句之前,它仍将执行asuncfunc
,但是你不能在不等待的情况下使用a
值。但是OP不是询问如何使用结果,而是询问同步/异步行为。这详细解释了它是如何工作的