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

Promise内部用this访问外部数组失败的解决方案咨询

问题解答:能否用this访问results数组?

首先直接给结论:你不能通过this关键字访问这段代码里的results数组,下面详细解释原因和this在这个场景的作用:

为什么this.results是undefined?

  1. results是独立变量,不是对象属性
    results是你用let声明的独立变量,而this关键字的作用是引用当前执行上下文的"所有者"对象——它只能访问该对象上的属性,无法直接引用独立存在的变量。你写this.results,相当于在问"当前this指向的对象有没有results这个属性",而这个对象根本没有这个属性,所以返回undefined。

  2. 箭头函数的this指向规则
    你的代码里用了箭头函数作为then的回调(.then(m => { ... })),箭头函数不会绑定自己的this,它会继承外层非箭头函数上下文的this值:

    • 如果这段代码写在全局作用域中,外层的this就是全局对象(浏览器里是window,Node.js里是globalThis);
    • 而你用let声明的results不会挂载到全局对象上,所以this.results自然找不到对应的值。

这个场景中this的作用是什么?

在你当前的箭头函数回调里,this的作用是继承并引用外层上下文的this值:

  • 如果这段代码是在某个类的方法内部,this会指向该类的实例;
  • 如果在普通函数内部,this指向调用该函数的对象;
  • 如果在全局作用域,this指向全局对象。

但无论哪种情况,它都和你定义的results变量没有关联,因为results不是this指向对象的属性。

正确的解决方案

既然results在回调函数的作用域链中是可访问的(闭包特性),你直接使用变量名即可:

let myObj = { testArray: [] };
let results = [1,2,3];
send(results.join("\n"))
  .then(m => {
    send(`Please type a number.`)
      .then(m => {
        // 直接使用results变量,无需this
        myObj.testArray = results; 
        // 或者你原来的obj赋值:obj = { testArray: results };
      })
      .catch(err => console.error(err));
  })
  .catch(err => console.error(err));

如果你非要用this访问(不推荐,会增加不必要的复杂度),可以把results挂载到this指向的对象上,比如全局作用域下:

// 仅作演示,不推荐污染全局作用域
globalThis.results = results; // Node.js环境
// 浏览器环境:window.results = results;

// 之后在回调里可以访问
obj = { testArray: this.results };

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:17:52