Javascript 在节点中的承诺内调用类的其他函数

Javascript 在节点中的承诺内调用类的其他函数,javascript,node.js,promise,this,es6-promise,Javascript,Node.js,Promise,This,Es6 Promise,所以,我在一个类中有两个方法。两人都做出了承诺。第二个函数从它返回的承诺内部调用第一个函数 module.exports = { funcA: () => { return new Promise((resolve, reject) => { something ? resolve(something): reject('nope'); }); } funcB: () => { return new Promise(async(resolv

所以,我在一个类中有两个方法。两人都做出了承诺。第二个函数从它返回的承诺内部调用第一个函数

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');
    }
 }
}
当我试图从另一个类调用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');
    }
 }
}

我发现在对象内部使用箭头函数会破坏
这一点,但可以通过这种方式进行修复。

一种方法是在
模块外部创建函数。导出
块以获取每个函数的引用。然后可以省略
这个
关键字

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
}

只要停止使用
newpromise
,你所有的问题就会神奇地消失;)