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

两种Promise resolve实现方式的区别是什么?哪种是正确写法?

结论

两种写法在你当前的使用场景下都是完全正确的,运行效果没有任何区别,只是写法的简洁度和适用场景不同。

两段代码的核心差异

  • 第一段代码:给setTimeout传入了一个匿名箭头函数作为回调,定时器到期时会先执行这个匿名函数,再在函数内部调用resolve(),你可以在这个匿名函数里随意给resolve传递自定义参数,或者添加其他前置逻辑。
    对应代码:
    function longTask(){
        return new Promise((resolve, reject) =>
        setTimeout(() => resolve(), 1000)
    )}
    
    longTask().then(() => console.log("done"));
    
  • 第二段代码:直接把resolve函数本身作为回调传给setTimeout,定时器到期时会直接调用resolve,如果需要传参可以直接通过setTimeout的第三个及之后的参数传递,比如setTimeout(resolve, 1000, '返回结果')。你当前的场景没有传参需求,resolve默认收到的参数是undefined,而你的then回调没有接收参数,所以完全感知不到两者的运行差异。
    对应代码:
    function longTask(){
        return new Promise((resolve, reject) =>
        setTimeout(resolve, 1000)
    )}
    
    longTask().then(() => console.log("done"));
    

不同写法的选择建议

  • 如果需要在resolve执行前添加额外逻辑(比如打印日志、参数处理、异常判断调用reject等),或者需要给resolve传递自定义参数,选择第一种写法,灵活性更高,示例:
    setTimeout(() => {
      const result = '自定义返回结果'
      console.log('任务执行完毕,准备resolve')
      resolve(result)
    }, 1000)
    
  • 如果只是需要延迟触发resolve,不需要额外逻辑也不需要自定义传参,第二种写法更简洁,没有冗余的匿名函数包装,是更推荐的简化写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:45:03