Promise内部用this访问外部数组失败的解决方案咨询
问题解答:能否用this访问results数组?
首先直接给结论:你不能通过this关键字访问这段代码里的results数组,下面详细解释原因和this在这个场景的作用:
为什么this.results是undefined?
results是独立变量,不是对象属性
results是你用let声明的独立变量,而this关键字的作用是引用当前执行上下文的"所有者"对象——它只能访问该对象上的属性,无法直接引用独立存在的变量。你写this.results,相当于在问"当前this指向的对象有没有results这个属性",而这个对象根本没有这个属性,所以返回undefined。箭头函数的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
相关产品推荐
相关产品推荐

