async/await 微任务执行与面试中的常见问题解析

需积分: 9 0 下载量 32 浏览量 更新于2024-08-26 收藏 4KB MD 举报
在本篇文档中,主要讨论了JavaScript中的微任务执行与`async/await`语法在面试中常被考察的问题。`async/await`是ES7引入的一种异步编程解决方案,它通过将异步操作转化为同步的写法,提高了代码可读性和简洁性。 问题1:基本`await`用法 问题1中的代码展示了如何使用`async`函数和`await`关键字处理字符串。当我们在`await`后面没有提供Promise对象时,它会直接返回表达式的值,如`"lagou"`,因此`t1()`函数会立即输出字符串"lagou",与同步代码等价。 问题2:空Promise与`await` 问题2展示了`await`处理空Promise的情况。由于`await`会等待Promise的`resolve`状态,但此处Promise没有具体的resolve函数,因此`console.log(a)`不会被执行,因为`a`始终没有获取到值,打印结果为空。 问题3:`resolve`无参数 问题3中的Promise在`resolve()`方法中没有传递任何参数,这意味着`await`接收到的是`undefined`,所以在`console.log(a)`中会打印出`undefined`,即使Promise已经处于resolve状态。 问题4:Promise resolve值的返回 在问题4中,`resolve`方法接收一个字符串"hello",所以当`await`等待这个Promise时,会得到并返回这个值,因此`console.log(a)`会输出"hello"。 问题5:`resolve`方法的调用 问题5中提到的Promise在`resolve`方法内部没有具体执行,但`await`仍然会在Promise状态变为resolve后等待,但由于没有实际的值传递,`console.log(a)`依然会输出`undefined`。 总结来说,这些问题考察的是开发者对`async/await`和Promise机制的理解,包括`await`关键字的工作原理、Promise的不同状态以及如何正确地与`await`一起使用。熟练掌握这些概念有助于在面试中展示对异步编程的深入理解和实践能力。在实际编程中,正确处理`await`和Promise的交互至关重要,因为它关系到程序的性能和错误处理。