请参阅作为promise中的回调函数的类函数中的类对象

问题描述 投票:0回答:3

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

javascript es6-promise
3个回答
2
投票

当您提取对函数的引用并将其传递给其他函数时,它不会保持知道它应该是某个类的方法。它只是一个其他函数将调用的函数引用。因此,它不会保持与intance的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
投票

使用箭头功能:

class myClass {

    constructor() {}

    doSomethingAsync = (resolve, reject) => {        
        let me = this;
        console.log(me);     
    }

}

export default (new myClass);

0
投票

你需要将this绑定到函数:

constructor() {
  this.doSomethingAsync = this.doSomethingAsync.bind(this);
}

另外,你可以使用箭头功能,但我认为你需要一个特定版本的babel:

doSomethingAsync = (resolve, reject) => { ... }
© www.soinside.com 2019 - 2024. All rights reserved.