我正在使用与dataContext相关的一些typescripts clases的重构。事情是昨天我花了很多时间来弄清楚为什么我没有从我的新datacontext获得一个breeze.promise。最后我得到了解决方案,它与“this”的范围有关。 不好用“this”的例子:
public getSomething(){
return this.manager.executeQuery(query)
.then(function (data) {
//THIS IS NOT WORKING" INSIDE OF THE FUNCTION
this.log('this log will never be loged :(');
}
}
现在相同的代码工作正常,但使用“that”作为临时变量:
public getSomething(){
var that=this;
return this.manager.executeQuery(query)
.then(function (data) {
that.log('get something is complete');
}
}
如果你看到第二段代码工作正常,但我必须为我班上的每个方法重复这个过程。现在我的问题是: 如何在班级创建“那个”变量?那可能吗?
我尝试使用下面的代码,但是我收到了一个编译错误:“无法找到符号'那个'。”
export class eventDataContext extends dataContextBase.dataContextBase {
public that;
constructor() {
super();
that = this;
...
}
}
任何想法如何将这个新变量“那个”放在班级?谢谢!
答案 0 :(得分:3)
TypeScript有一个方便的快捷方式来解决这个问题,称为"胖箭头语法" =>
如果您使用以下内容,它应该适合您:
getSomething(){
return this.manager.executeQuery(query)
.then((data) => {
this.log('This *will* now be logged :)');
});
}
快速免责声明 - 我不确定query
的来源 - 它未被传递到getSomething
方法。如果是类属性,请使用this.query
。