所以在一个项目中,我找到了可以简化为的代码:
export abstract class Logger {
private static log(level: LogLevels, ...args: Array<any>) {/**/}
public error(...args: Array<any>): LogData {
return Logger.log(LogLevels.ERROR, ...args);
}
}
export class LoggerService extends Logger {
public error(...args: Array<any>): any {
return this._log.bind(this)(super.error(...args));
}
private _log(logData: LogData) {
let logstashLoggerData = this.extendLoggerData(logData);
return this.logStashApi.log(logstashLoggerData)
.toPromise()
.catch(err => console.error(err));
}
}
我有点担心this._log.bind(this)(super.error(...args));
所在的行。
我第一次看到这样的东西,所以我宁愿保持谨慎,不要破坏任何东西。它与Promise或.bind()
无关,不是吗?从我的测试看来,该语句可以简单地简化为this._log(super.error(...args));
(但是为什么要复杂化?),有人可以确认吗?
答案 0 :(得分:0)
是的,您可以并且应该摆脱这种内联绑定。我建议将其移到类的构造函数中(而不是完全摆脱绑定),因为那样您就可以将服务方法(error
,warning
等)用作“普通函数” ,如果您需要从模块中导出它们而不暴露LoggerService实例本身,这将很有帮助