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

为何变量savedCards在第二个Promise中未定义?技术咨询

为什么第一个Promise里savedCards有值,第二个里却未定义?

嘿,我来帮你拆解下这个问题,大概率是这几个常见原因之一:

  • 最可能:变量拼写错误
    看你代码里第二个then的console.log写了console.log(savedCar...,是不是手滑把savedCards写成了savedCard(少了末尾的s)?如果是这样,浏览器会把它当成全新的未声明变量,自然会显示undefined。这种小失误在写代码时真的太常见了😂。

  • Promise链的传递逻辑误解
    虽然savedCards是函数作用域的变量,但如果你在第一个then的回调里没有正确处理异步逻辑,或者中间有其他代码意外重置了它?不过从你的代码结构来看,Promise链式调用是顺序执行的——第一个then的回调执行完毕后才会触发第二个then,所以这个可能性比较低。

  • 属性名拼写错误
    你在第一个then里给savedCards赋值的是value.saveCard,但前面处理的是value.saves,会不会这里应该是value.saves?如果value.saveCard本身就是undefined,那第一个then里的console.log其实输出的是undefined?不过你说第一个Promise里有有效值,这个可能不成立,但还是可以检查下这个属性名是否正确。

  • 作用域被遮蔽
    如果你在第二个then的回调里,不小心用let或const重新声明了savedCards,就会把外部函数作用域的变量给遮蔽掉,导致访问到的是新的未赋值变量,自然显示undefined。

给你个小优化建议

为了避免这种作用域相关的坑,你可以把savedCards通过Promise链传递,而不是依赖函数作用域的变量:

saveCard(eCard: IEcards) {
  var savedCards: IEcards[] = [];
  this.storage.get("key").then((value) => {
    if (value.saves == undefined) {
      value.saves = savedCards;
    }
    savedCards = value.saveCard; // 务必确认这个属性名正确哦
    console.log(savedCards);
    return savedCards; // 把值返回给下一个then
  }).then((savedCards) => {
    console.log(savedCards); // 直接接收上一个then返回的值,逻辑更清晰可靠
  });
}

这样就不用纠结作用域的问题,代码逻辑也更直观~

内容的提问来源于stack exchange,提问作者Kumaran Raj K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:11:02