在一个打字稿SignalR客户端中,如何在从异步中枢事件或承诺返回期间访问类范围,例如:
Client.ts
class Client {
private _elementId: string;
constructor(elementId: string){
this._elementId = elementId
}
$.connection.hub.start()
.done(function () {
$("#" + this._elementId).html("Connection Id" + $.connection.hub.id);
})
.fail((err) => {
$("#" + this._elementId).html("Error occured");
});
// handlers - methods called by the SignalR Hub
$.connection.myHub.client.notification = function (message) {
$("#" + this._elementId).html(message);
};
}
对于上述start
和notification
方法的承诺,this
的范围已丢失,因此我无法访问_elementId
成员变量。
答案 0 :(得分:2)
您可以在() => {}
处理程序上使用箭头函数done
来维护词法范围,类似于使用fail
处理程序的方式。这将允许this
引用处理程序中的类实例:
class Client {
private _elementId: string;
constructor(elementId: string){
this._elementId = elementId
}
$.connection.hub.start()
.done(() => {
$("#" + this._elementId).html("Connection Id" + $.connection.hub.id);
})
.fail((err) => {
$("#" + this._elementId).html("Error occured");
});
// handlers - methods called by the SignalR Hub
$.connection.myHub.client.notification = function (message) {
$("#" + this._elementId).html(message);
};
}
这是一个简单的example。注意控制台中的消息。
希望这有帮助!