【发布时间】:2020-04-19 16:47:08
【问题描述】:
我有一个从外部系统获取Requisition 数据的代码,如下所示:
init() {
const requisitionData = this.loginMb().pipe(
map(response => response.data.token),
switchMap(loginData => this.getRequisitions(loginData)),
map(response => response.data),
);
requisitionData.subscribe(this.processData);
}
这里是processData()
processData(response: any) {
const requisitions = response.content.data;
for (const p of requisitions) {
const req = new Requisition(); // Requisition is the TypeORM entity
req.title = p.title;
req.reference = p.reference;
// other fields
this.repo.save(requisition);
}
这是构造函数
@Injectable()
export class RequisitionSync {
constructor(
@InjectRepository(Requisition) private readonly repo: Repository<Requisition>,
private readonly httpService: HttpService,
) {}
问题在processData()内部,this.repo变成undefined。如果我在init() 里面做console.log(this.repo),它就不会是undefined。
【问题讨论】:
-
我相信这是因为
subscribe的词法this与类本身不同。如果您只是在processData方法中使用console.log(this)会发生什么? -
它输出
SafeSubscriber { ...,这是全部内容:pastebin.com/s1zPFBfh -
和我想的一样,subscribe 的
this与 class 不同。 -
一个问题,
processData不应该是async函数吗? -
我其实也不确定。
标签: typescript nestjs typeorm