В моем коде у меня есть класс под названием WorkspaceDatabase, который получен из динамического дерева Пример .Я уже добавил некоторую отладочную информацию, чтобы лучше понять проблему.
Проблема:
В complete()
происходит первая странная вещь: this.wsnodes.push
не удаетсяс TypeError: Cannot read property 'push' of undefined
, но, насколько я вижу, я его инициализировал.
Следующее, что происходит, это то, что в getChildren
console.log(this.workspaces);
возвращает массив длины 0. Но initialData () запускается раньшеэто и this.workspaces
получает значение ws
, и оно правильно выводится на консоль (7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]
.
Может кто-нибудь объяснить, что я не правильно понимаю?
export class WorkspaceDatabase {
workspacesService: WorkspacesService;
workspaces: RQMWorkspace[] = new Array();
wsnodes: WorkspaceFlatNode[] = new Array();
setWorkspaceService(workspaceService: WorkspacesService) {
this.workspacesService = workspaceService;
}
constructor() {
this.wsnodes.push(new WorkspaceFlatNode(123, "test", true, 0, true));
console.log("WorkspaceDatabase constructed");
}
initialData() {
this.workspacesService.getWorkspaces().subscribe(
{
next(ws) {
this.workspaces = ws;
console.log(this.workspaces);
},
complete() {
this.workspaces.forEach((ws) => {
if (ws.workspace_id == null) {
console.log(this.wsnodes);
this.wsnodes.push(new WorkspaceFlatNode(ws.id, ws.name, true, 0, true))
}
});
console.log("completed");
console.log(this.wsnodes);
}
}
);
}
getChildren(id: number): WorkspaceFlatNode[] | undefined {
let children: WorkspaceFlatNode[] = new Array();
console.log(this.workspaces);
this.workspaces.forEach((ws) => {
if (ws.workspaceId == id) {
ws.workspaces.forEach((innerWs) => {
children.push(new WorkspaceFlatNode(innerWs.id, innerWs.name, true, 0, true))
});
ws.documents.forEach((doc) => {
children.push(new WorkspaceFlatNode(doc.id, doc.name, false, 0, true))
});
}
})
return children;
}
}