在 Node 的 Promise 中调用 class 的其他函数

Calling other functions of a class inside a Promise in Node

所以,我在class中有两个方法。两者returns一个承诺。第二个函数从 promise 内部调用第一个函数 returns.

module.exports = {
 funcA: () => {
  return new Promise((resolve, reject) => {
       something ? resolve(something): reject('nope');
  });
 }

 funcB: () => {
    return new Promise(async(resolve, reject) => {
            try {
                const something = await this.funcA();
            } catch(err) {
                reject('error');
    }
 }
}

当我尝试从另一个 class 调用 funcB() 时,如下所示:

let something = await someService.funcB();

我得到:

TypeError: this.funcA() is not a function

您能解释一下为什么会发生这种情况以及如何解决这个问题吗?

我认为这就是你需要做的

module.exports = {
 funcA: function() {
  return new Promise((resolve, reject) => {
       something ? resolve(something): reject('nope');
  });
 }

 funcB: function() {
    return new Promise(async(resolve, reject) => {
            try {
                const something = await this.funcA();
            } catch(err) {
                reject('error');
    }
 }
}

我发现在对象内部使用箭头函数就像你做的那样中断this,但你可以用这种方式修复它。

使其工作的一种方法是在 module.exports 块之外创建函数以获取每个函数的引用。那么this关键字可以省略

const funcA = () => {
  return new Promise((resolve, reject) => {
    // code here
  });
};

const funcB = () => {
  return new Promise(async(resolve, reject) => {
    try {
        const something = await funcA();
        resolve(something);
    } catch(err) {
        reject('error');
    }
  })
};

module.exports = {
  funcA,
  funcB
}