Javascript 如何将匿名函数变量分配给类方法变量?

Javascript 如何将匿名函数变量分配给类方法变量?,javascript,node.js,http,coap,Javascript,Node.js,Http,Coap,我试图通过使用实现与coap服务器的通信。我的目标是获得响应(在response事件处理程序中),然后将其传递给其他变量和函数 事件:'response' function (response) { } 当收到响应时发出。response是 如果指定了observe标志,则'response'事件将返回的实例。根据observe规范,它表示来自服务器的更新 我创建了类someClass,其中包含serverRequest()方法 方法serverRequest()采用强制选项参数(用于设置请

我试图通过使用实现与coap服务器的通信。我的目标是获得响应(在
response
事件处理程序中),然后将其传递给其他变量和函数

事件:
'response'

function (response) { }
当收到
响应时发出。response是

如果指定了
observe
标志,则
'response'
事件将返回的实例。根据observe规范,它表示来自服务器的更新

我创建了类
someClass
,其中包含
serverRequest()
方法

方法
serverRequest()
采用强制选项参数(用于设置请求选项)和可选参数(如果需要,用于设置消息正文)。此方法的目的是向服务器发送请求并返回
响应
,这是的实例

const coap=require('coap');
上课{
构造函数(someOption){
this.someOption=someOption;
}
serverRequest(选项,messageBody=未定义){
const request=coap.request(选项);
让我们回应;
request.on('response',res=>{
console.log(响应);//未定义
响应=res;
console.log(响应);//有效响应
});
if(messageBody!==未定义){
request.write(messageBody);
}
request.end();
console.log(响应);//未定义
返回响应;
}
}
我成功发送消息并获得响应,但是匿名函数中的
response
变量似乎是唯一的,并且与
response
变量
serverRequest
方法不同


问题:如何将变量从匿名函数传递到其他作用域?

您可以在匿名函数体内调用您的方法:

根据评论进行编辑: 使用
var=this
是欺骗作用域的常见方法
始终属于函数、方法或匿名的范围,两者仍然是函数

因此,为了保留对类作用域的引用,我将类方法作用域中的
this
分配给
var,这样当
this
更改为匿名函数作用域时,我们仍然可以访问它

在和上面使用箭头函数时,
this
关键字不会被重新绑定,我们不必欺骗作用域

class Test 
{
  constructor(someOption) {
    this.someOption = someOption;
  }

  myMethod ( data ) {
    //.. do something
  }

  anotherMethod() {
    var data = {answer:42};
    functionWithCallback( (differentOption) => {
      this.myMethod(data);
      this.someOption = differentOption;
    });
  }        
}
问题作者编辑:


我使用
这个
关键字没有问题,脚本产生了相同的结果。

我不明白,为什么要使用
那个
变量,也许你可以澄清一下?我可以从匿名函数访问类方法和变量,问题是在更改变量值或调用设置类值变量的方法后,值仅在该匿名函数中保持更改,当我在收到响应后打印类变量时,变量保持与收到响应前相同。好的,我将编辑答案,你的问题有点复杂,但基本上你是在试图理解scopes@Lycopersicum现在看一看它仍然不工作,目前我正在尝试用回调函数来编写函数,以向您展示,它不工作我已经用回调函数编写了自己的函数,它工作了,它工作得很好,但是在我的项目中它不工作。我尝试通过键入
console.log(this)来打印
this
对象在两个位置内:在抽象函数内和方法语句的返回之前。两者都显示了不同的结果,在抽象函数中,一切似乎都如预期的那样,但在方法范围中,它始终保持不变,也在调用我在项目中尝试更改的
obj.serverRequest()
obj.variable
后保持不变。。。
class Test 
{
  constructor(someOption) {
    this.someOption = someOption;
  }

  myMethod ( data ) {
    //.. do something
  }

  anotherMethod() {
    var data = {answer:42};
    functionWithCallback( (differentOption) => {
      this.myMethod(data);
      this.someOption = differentOption;
    });
  }        
}