我有一个类方法,它是Promise中的一个回调函数。
myClass.js:
class myClass {
constructor() {}
doSomethingAsync(resolve, reject) {
let me = this;
console.log(me); // undefined
// .... do something that returns either resolve() or reject()
}
}
export default (new myClass);
app.js
import ClassA from "myClass.js";
new Promise(ClassA.doSomethingAsync).then(() => {
// .... do something if success ....
}
}).catch(() => {
// ... do something if failed ...
})
我遇到的问题是me
中的doSometingAsync()
应该是指ClassA
,但显示为undefined
。我该如何在该函数中引用ClassA?
答案 0 :(得分:2)
当您提取对函数的引用并将其传递给其他对象时,它不会保留有关它应为某个类的方法的任何知识。这只是其他一些函数将调用的函数引用。结果,它不会维持与实例的this
的绑定。您可以使用bind()
class myClass {
constructor() {
this.name = "mark"
}
doSomethingAsync(resolve, reject) {
let me = this;
console.log(me);
}
}
let ClassA = new myClass
new Promise(ClassA.doSomethingAsync.bind(ClassA)).then(() => {
// .... do something if success ....
}).catch(() => {
// ... do something if failed ...
})
答案 1 :(得分:1)
使用箭头功能:
<mat-radio-group>
<mat-grid-list cols="3">
<mat-grid-tile *ngFor="let radioBut of objectlist">
<mat-radio-button [value]="radioBut">
{{radioBut.label}}
</mat-radio-button>
</mat-grid-tile>
</mat-grid-list>
</mat-radio-group>
答案 2 :(得分:0)
您需要将this
绑定到该函数:
constructor() {
this.doSomethingAsync = this.doSomethingAsync.bind(this);
}
或者,您可以使用箭头功能,但是我认为您需要特定版本的babel:
doSomethingAsync = (resolve, reject) => { ... }