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

Promise.all结合对象映射返回undefined问题求助

问题分析与修复方案

我来帮你梳理下代码里导致控制台输出Unsubscribed Results => undefined的几个关键问题:

问题1:未返回Promise.all到then链中

第一个.then()的回调函数里,你创建了Promise.all但没有把它return出去。Promise的then链中,如果回调函数没有返回值,会默认返回一个resolved为undefined的Promise,这就导致下一个then接收的参数直接是undefined。

问题2:map回调未返回Promise

你在map里用了带大括号的箭头函数(key, index) => { ... },这种写法下必须显式使用return才能返回值。现在你的map实际上生成了一个全是undefined的数组,Promise.all处理这个数组会直接resolve为undefined数组,更重要的是tools.unsubscribe的Promise根本没被加入等待队列,相当于没正确等待这些异步操作完成。

另外,这里用index取results[index]是错误的——Object.keys(results)返回的是对象的键名数组,results[key]才是对应的值,index只是数组的索引,和对象键没有对应关系。

问题3:变量名拼写错误

第二个then的参数是unsubscribe,但你console.log里写的是unsubscribed,这会导致该变量未定义(不过你当前打印的是undefined,可能是调试时调整过,但还是要修正)。


修复后的代码

tools.isMember(userid)
  .then(results => {
    // 返回Promise.all,让then链能接收它的resolve结果
    return Promise.all(
      // 用key直接取对应值,去掉不必要的index,用简洁箭头函数自动返回Promise
      Object.keys(results).map(key => tools.unsubscribe(results[key], userid))
    )
  })
  .then(unsubscribedResults => {
    // 变量名保持一致
    console.log('Unsubscribed Results => ', unsubscribedResults);
  })
  .catch(err => console.log(err));

额外优化建议

如果你的环境支持async/await,用它可以让代码更易读、更直观:

try {
  const results = await tools.isMember(userid);
  const unsubscribedResults = await Promise.all(
    Object.keys(results).map(key => tools.unsubscribe(results[key], userid))
  );
  console.log('Unsubscribed Results => ', unsubscribedResults);
} catch (err) {
  console.log(err);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:45:02