await 非 promise 值时自动调用 promise.resolve() 包装并返回原值;对 thenable 对象则调用其 then 方法等待完成;undefined、null 等假值同样被包装且不报错;即使同步值也会插入微任务检查点,影响事件循环顺序。

当 await 后面跟的不是一个 Promise 对象时,JavaScript 会自动将其包装成一个已解决(resolved)的 Promise,并立即返回原始值。
await 对普通值(如字符串、数字、对象)的处理
JavaScript 引擎内部调用 Promise.resolve() 将非 Promise 值转为 Promise。这意味着:
-
await 42等价于await Promise.resolve(42),结果是42 -
await "hello"等价于await Promise.resolve("hello"),结果是"hello" -
await { a: 1 }也会被包装,结果仍是该对象
await 对 thenable 对象的特殊处理
如果值有 then 方法(即 “thenable”),await 会尝试调用它,并等待其完成(类似 Promise 的行为):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
await { then: (resolve) => setTimeout(() => resolve('done'), 100) }会暂停约 100ms,再返回'done' - 但注意:这不等于标准 Promise,比如没有
catch或finally,也不受 Promise 全局异常捕获影响
undefined、null 和其他假值的处理
它们同样被 Promise.resolve() 包装,不会报错:
-
await undefined→ 返回undefined -
await null→ 返回null -
await 0、await false都原样返回
与直接赋值的区别
虽然结果看起来一样,但 await 总是让当前 async 函数暂停并让出执行权(即使值同步):
-
let x = await 123;中,x是123,但 JS 引擎会在此处插入微任务检查点 - 这会影响事件循环顺序,例如在
await 123后,已加入队列的Promise.then回调可能先于后续同步代码执行
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










