引用在promise中用作回调函数的类函数中的类对象

时间:2018-09-06 15:29:13

标签: javascript es6-promise

我有一个类方法,它是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?

3 个答案:

答案 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) => { ... }