我正在尝试使用coap package实现与coap服务器的通信。我的目标是获得响应(在coap.request()
response
事件处理程序中),然后将其传递给其他变量和函数。
活动:
'response'
function (response) { }
收到
response
时发出。响应是一个例子IncomingMessage
如果指定了
observe
标志,则'response'
事件将返回ObserveReadStream
的实例。根据观察规范,它代表来自服务器的更新。
我创建了一个包含someClass
方法的课程serverRequest()
。
方法serverRequest()
采用强制选项参数(为coap.request()
设置请求选项)和可选参数,如果需要,可设置消息体。此方法的目的是向服务器发送请求并返回response
,const 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;
}
变量不同。
问题:如何将变量从匿名函数传递到其他作用域?
答案 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
关键字没有问题,脚本产生的结果相同。