我使用 tsyringe 作为依赖容器,我有 2 个类。 AccountingService
和 TransactionService
。我正在监听 TransactionService
中触发的事件,以便我可以使用 accountingRepository
更新 AccountingService
中的数据,但在 updateTriggered 方法上,它在 accountingRepository
上显示错误 Cannot read properties of undefined (reading 'findOne')
。这是我的Class的样子:
会计服务
@injectable()
class AccountingService {
constructor(
private accountingRepository: AccountingRepository,
private transactionService: TransactionService
) {
this.transactionService.on('updateTrigger', this.updateTrigger);
}
private async updateTrigger(data: any) {
this.accountingRepository.findOne({ id: data.id })
}
}
交易服务:
@injectable()
class TransactionService extends EventEmitter {
constructor(
...Some dependencies,
) {}
private async someTransactionOccurred(data: any) {
this.emit('updateTrigger', 'id', {});
}
}
updateTrigger 方法中的 console.log(this)
显示 TransactionService
对象而不是 AccountingService
回答1
好的,我找到了解决方案。改变它从
this.transactionService.on('updateTrigger', this.updateTrigger);
至:
this.transactionService.on('updateTrigger', this.updateTrigger.bind(this));
解决了。所以,我的理解是,如果我们不显式使用 .bind(this)
,它将是 transactionService 的对象。虽然,我还在等专家为什么会这样