如何将匿名函数变量赋给类方法变量?

时间:2018-01-09 10:58:25

标签: javascript node.js http coap

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

  

活动: 'response'

function (response) { }
     

收到response时发出。响应是一个例子   IncomingMessage

     

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

我创建了一个包含someClass方法的课程serverRequest()

方法serverRequest()采用强制选项参数(为coap.request()设置请求选项)和可选参数,如果需要,可设置消息体。此方法的目的是向服务器发送请求并返回responseconst coap = require('coap'); class someClass { constructor(someOption) { this.someOption = someOption; } serverRequest(options, messageBody=undefined) { const request = coap.request(options); let response; request.on('response', res => { console.log(response); // undefined response = res; console.log(response); // valid response }); if (messageBody !== undefined) { request.write(messageBody); } request.end(); console.log(response); // undefined return response; } } 的实例。

response

我发送消息并成功获取响应,但匿名函数中的response变量似乎是唯一的,与serverRequest方法中的#include <iostream> using namespace std; int main() { int t[4] = { 8, 4, 2, 1 }; int *p1 = t + 2, *p2 = p1 - 1; // p1 holds the address of t[2], p2 holds the address of t[1] p1++; //Now, p1 holds the address of t[3] cout << *p1 - t[p1 - p2] << endl; // We need to pointer arithmetic //Here p1 has the value 1, //t[(t+3)-(t+1)] = t[2] which is 2, //So, the answer would be 1-2 = -1 return 0; } 变量不同。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

根据评论进行修改 使用var that = this;欺骗范围的常用方法。 this将始终属于函数,方法或匿名的范围,两者仍然是函数。

因此,为了保留对类范围的引用,我将类方法范围中的this分配给var that,以便this更改为匿名&#39 ;功能范围,我们仍然可以访问它。

ECMAscript 6及以上使用箭头功能时,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;
    });
  }        
}

问题作者编辑:

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