此节点/ es6代码的输出是什么,为什么?
我在工作应用程序上遇到了这个编码问题,我想学习和理解,所以这里是编码问题,然后我将提供我的解释,并请SO社区详细阐述/纠正我的解释:
async function someFunction() {
console.log('someFunction'):
}
console.log('start');
someFunction();
console.log('end');
在我看来,这里的输出现在的顺序可以说是不可预测的,仅因为我们知道以someFunction
开头的console.log
的实现将是:
- 开始
- someFunction
- 结束
我已经在浏览器中运行了此代码,但我确实看到它始终按此顺序运行。我只是不确定原因。
在线阅读,“忘记” await
关键字以执行async someFunction
,该功能仍将异步执行。
我的理由是,尽管someFunction
是异步的并返回了一个Promise,但someFunction的第一行执行将发生在console.log('end')之前。我不确定为什么许多开发人员认为这些是很好的招聘问题,也许是。我只是发现它们是不是真实世界的技巧性问题。在现实世界中,将处理someFunction
返回的承诺,例如:
console.log('start');
await someFunction();
console.log('end');
请提供有关此代码的说明。
回答如下:这里的顺序是完全确定的,它将始终为start
-> someFunction
-> end
:
async function someFunction() {
console.log('someFunction');
}
console.log('start');
someFunction();
console.log('end');