在 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
}
所以,我在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
}