JavaScript异步/等待未正确等待?

JavaScript异步/等待未正确等待?,javascript,asynchronous,async-await,ecmascript-2017,Javascript,Asynchronous,Async Await,Ecmascript 2017,我对JavaScript的异步/等待函数有问题。这发生在一个内部应用程序上,我无法共享源代码,但我将我的问题快速复制到一起: 功能睡眠(毫秒){ 返回新承诺(resolve=>setTimeout(resolve,ms)); } 异步函数baz(输入){ 控制台日志(“4”); 等待睡眠(1000); 控制台日志(“5”); 返回输入; } 异步功能条(输入){ 控制台日志(“3”); 返回等待baz(输入); } 异步函数foo(){ 控制台日志(“2”); const foo=等待栏(“f

我对JavaScript的异步/等待函数有问题。这发生在一个内部应用程序上,我无法共享源代码,但我将我的问题快速复制到一起:

功能睡眠(毫秒){
返回新承诺(resolve=>setTimeout(resolve,ms));
}
异步函数baz(输入){
控制台日志(“4”);
等待睡眠(1000);
控制台日志(“5”);
返回输入;
}
异步功能条(输入){
控制台日志(“3”);
返回等待baz(输入);
}
异步函数foo(){
控制台日志(“2”);
const foo=等待栏(“foo”);
返回foo;
}
控制台日志(“1”);
foo();

控制台日志(“6”)顶层正在同步运行(它总是这样)-它不等待
foo()在继续
console.log(“6”)之前进行解析。将对
foo
的调用封装在异步的东西中,然后等待它。如果要在以后显示其值,还需要保存
foo
的返回值:

功能睡眠(毫秒){
返回新承诺(resolve=>setTimeout(resolve,ms));
}
异步函数baz(输入){
控制台日志(“4”);
等待睡眠(1000);
控制台日志(“5”);
返回输入;
}
异步功能条(输入){
控制台日志(“3”);
返回等待baz(输入);
}
异步函数foo(){
控制台日志(“2”);
const foo=等待栏(“foo”);
返回foo;
}
(异步()=>{
控制台日志(“1”);
const str=等待foo();
控制台日志(“6”);
console.log(str);

})();
您没有等待对
foo
的调用。您就在那里,但这仍然不能解释为什么foo()返回
未定义的
,而不是
“foo”
。这是因为您打破了底层的承诺链。您怎么能期望
“foo”
输出到控制台?您认为哪一行代码会输出这些内容?你所有的console.log都是数字的,你不是一次
console.log('foo')
对,但这并不能解释为什么它返回
undefined
,而不是
foo
undefined
是最后一个
console.log的“结果”
。。。在developer工具控制台中键入
console.log('hello')
。。。oputput是
hello
undefined
结果表明,我给出的示例没有准确地再现我遇到的问题。一旦我创建了一个精确的复制品,我将重新发布这个问题。由于您提供的答案确实回答了所提出的问题,并可能在将来帮助人们,因此我将继续并将其标记为答案。谢谢