You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中为何在await旁使用new Promise?看似无需使用的原因

关于await与Promise包裹setTimeout的疑问

我在javascript.info的async/await教程中看到一段代码:await new Promise((resolve, reject) => setTimeout(resolve, 3000)); img.remove();,我认为这段代码可改写为await setTimeout(()=>{img.remove()}, 3000),因此产生疑问:既然await可替代.then()和.catch(),为何还要在await旁使用new Promise?即便像本例这样没有成功/失败的条件判断也会使用?

首先要明确:你改写的代码完全达不到原代码的效果。

setTimeout本身返回的是一个数字类型的定时器ID,不是Promise对象。而await的作用是等待Promise(或者实现了then方法的对象)完成,遇到非Promise值会直接跳过等待逻辑。所以await setTimeout(...)不会真的等3秒,img.remove()会立刻执行,根本起不到延迟删除的作用。

原代码里用new Promise包裹setTimeout,核心目的是把回调式的异步操作转换成Promise风格——因为setTimeout是基于回调的原生API,本身不支持Promise,必须手动包装一层,让await能识别并等待这个异步操作结束(也就是3秒后定时器触发,调用resolve完成Promise),之后才会执行后面的img.remove()。

哪怕不需要处理成功/失败的判断,只要你想用await来等待一个回调式的异步操作,就必须做这个Promise包装。这不是多余的步骤,而是await和原生回调API之间的必要“适配”。

内容的提问来源于stack exchange,提问作者lome1446

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:10:57