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

Promise返回Promise而非数据,如何让指定函数返回3?

解决Promise返回原始值而非处理后结果的问题

嘿,我来帮你捋清楚这个问题~你现在的核心问题是:你的fn()返回的是最开始创建的那个Promise(它最终会resolve成1),而你在then里做的处理没有传递出去。

问题分析

原代码里,你调用promise.then(...)的时候,这个then方法其实会返回一个新的Promise,这个新Promise的resolve值就是你在then回调里return的内容。但你没有把这个新Promise作为fn()的返回值,而是返回了最初的那个Promise,所以外面调用fn()拿到的还是resolve为1的Promise,自然得不到你想要的3。

修改后的代码(两种写法)

写法1:基于原代码调整

const fn = () => { 
  let promise = new Promise(function(resolve, reject) { 
    setTimeout(() => resolve(1), 1000); 
  }); 
  // 把then返回的新Promise赋值给promise,这样返回的就是处理后的Promise
  promise = promise.then(function(result) { 
    return result + 2; // 1+2=3,得到你想要的结果
  }); 
  return promise; 
}

写法2:更简洁的链式调用

const fn = () => { 
  return new Promise((resolve, reject) => { 
    setTimeout(() => resolve(1), 1000); 
  })
  .then(result => result + 2); // 直接返回链式调用后的Promise
}

如何获取返回的3?

因为fn()返回的依然是Promise(Promise的特性就是不会直接返回同步值,必须通过异步方式获取),所以你需要用以下两种方式获取结果:

// 方式1:用then回调获取
fn().then(value => {
  console.log(value); // 1秒后输出3
});

// 方式2:用async/await(更像同步写法)
async function getResult() {
  const value = await fn();
  console.log(value); // 1秒后输出3
}
getResult();

关键知识点回顾

  • Promise的then、catch、finally方法都会返回一个新的Promise,这个新Promise的状态由回调函数的返回值决定。
  • 如果想让外层拿到处理后的结果,必须把这个新的Promise返回出去,而不是原始的Promise。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:34:03