处理this
的正确或“更好”的方法是带有Promises(甚至回调)的JavaScript类
目前,我只是通过执行此操作来解决
var self = this;
但这对我来说感觉像是“ hackey”。
忽略下面的大多数代码,这只是为了阐明我的观点。
class thing {
drawthing(thing) {
console.log(thing);
}
updatethings(thing) {
var self = this; //a better way to do this
return new Promise(function (resolve) {
setTimeout(function(){
self.drawthing(thing);
return resolve(thing);
},2000);
});
}
}
var t = new thing();
t.updatethings('hello').then(console.log);
答案 0 :(得分:1)
箭头功能将为您完成此任务。 请查看一些说明和examples here。
以下是正确的代码段:
class thing {
drawthing(thing) {
console.log(thing);
}
updatethings(thing) {
// arrow func
return new Promise((resolve) => {
// another arrow func
setTimeout(() => {
// Because of arrow function scoping, `this` passes through.
this.drawthing(thing);
return resolve(thing);
},2000);
});
}
}
var t = new thing();
t.updatethings('hello').then(console.log);
答案 1 :(得分:1)
尝试使用lambda / arrow函数:
template<typename U>
MyClass<U>& operator +=(MyClass<U>& lhs, const U& rhs)
{
lhs.val += rhs;
return lhs;
}
答案 2 :(得分:0)
如果您的方法drawthing()将引发任何异常或错误,则您的诺言将永远无法解决,最终将引发异常。
您还应该在出现异常情况时处理拒收案件,例如
<div class="wrapper">
<mat-sidenav-container>
<div>
<app-mat-menu></app-mat-menu>
<router-outlet></router-outlet>
<app-footer></app-footer>
</div>
</mat-sidenav-container>
</div>
在调用方法时,您还应该捕获异常。
updatethings(thing) {
var self = this; //a better way to do this
return new Promise((resolve, reject)=>{
setTimeout(()=>{
try{
self.drawthing(thing);
}catch(err){ return reject(err);}
return resolve(thing);
},2000);
});
}