Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.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 JS中的异步/等待混淆_Javascript - Fatal编程技术网

Javascript JS中的异步/等待混淆

Javascript JS中的异步/等待混淆,javascript,Javascript,我在JS中学习异步,遇到了Async/Await。然后,我遇到了以下代码: function scaryClown() { return new Promise(resolve => { setTimeout(() => { resolve('function scaryClown() { return new Promise(resolve => { setTimeout(() => { resolve('async fu

我在JS中学习异步,遇到了Async/Await。然后,我遇到了以下代码:

function scaryClown() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('
function scaryClown() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('
async function msg() {
  const msg = await scaryClown();
  console.log('Message:', msg);
}
function msg() {
  scaryClown().then(msg => {
    console.log('Message:', msg);
  });    
}
函数scarcylown(){
返回新承诺(解决=>{
设置超时(()=>{
解析('
函数scarcylown(){
返回新承诺(解决=>{
设置超时(()=>{
解决('
wait解析承诺并返回解析值。所以上面的代码可以像下面那样编写。希望这能让您理解异步wait

情况就是这样: 当调用
async
函数(即
msg
)时,它会创建一个promise对象(我们称之为p),当它处理
wait
表达式时会返回该对象。
scaryClown()
执行,它设置计时器并返回另一个promise对象;我们将其称为Q。然后处理
wait
:此时函数返回promise P。该promise此时未解析;它处于挂起状态

如果在调用
msg()
之后有任何其他代码,则会像在任何函数调用之后一样执行。执行将继续,直到调用堆栈为空


然后,一段时间后,
scarcylown()
调度的计时器事件将触发,相应的承诺Q将被解析。由于此承诺Q位于
wait
表达式中,因此此解析将触发
msg()的执行上下文的恢复
,其中
wait
表达式现在计算为Q的解析值,即。"它不是返回
未定义的
,而是使用
return
关键字返回一个承诺,该承诺解析为
。请注意,函数在满足
wait
时已经返回。
return
语句将稍后异步执行,并且仅用于解析函数的承诺on在执行时返回了
await
@CertainPerformance,您好,“await scarlown();”也是如此return unwrapped hi Amit,so wait returns unwrapped wait解析您的承诺并将解析值赋给msg变量。因此,yes wait不返回承诺,它返回解析值。在您的情况下,joker emoji.ok Amit,最后一件事,如果msg常量包含joker emoji,那么我们调用msg()为什么函数,它会记录emoji。我的意思是,如果我们没有在异步函数中显式使用return,那么返回值是promise,解析为undefined?因此,当您通过添加async关键字使任何函数异步时,它会将该函数包装在promise中,并返回该promise。因此,如果您不从异步函数返回任何内容,那么n、 返回的承诺用undefined解析。您好,msg()返回undefined wrapped by promise是真的吗?异步函数消息不返回任何内容,在内部,它只是等待(等待)承诺从scaryClown函数解析,一旦解析(在您的情况下为2秒),vaiable msg将获取该值,然后将其记录在控制台中