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

promise.then返回新Promise时如何携带自定义值解决结果为undefined问题

问题原因
  • async函数默认返回规则问题:你的main函数没有显式返回sleep链式调用产生的Promise,async函数在无return语句时,返回的Promise会自动resolve为undefined,这就是你最后在main().then()中拿到undefined的核心原因。你需要将sleep(...).then(...)的执行结果return出去,才能让main返回的Promise携带你自定义的返回值。
  • sleep函数实现错误:你当前写的setTimeout(resolve(input), timeout)会立即执行resolve(input),而不是等待指定超时时间后触发,相当于给setTimeout传入了resolve执行后的返回值(undefined),完全没有延迟效果。正确写法需要给setTimeout传入一个回调函数,等超时后再执行resolve逻辑。
修改后的完整代码
function sleep(input, timeout) {
  return new Promise(resolve => {
    // 改为回调形式,延迟触发resolve
    setTimeout(() => resolve(input), timeout)
  });
}

async function main() {
  // 显式返回链式调用的Promise
  return sleep(['a','b'],1000)
  .then(([first, second]) => {
    console.log(first)
    console.log(second);
    return [first+'t', second];
  });
}
main()
.then(res => {
  console.log(res);
})
运行输出
a
b
['at', 'b']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:03:02