У нас есть иерархия людей, подобная приведенной ниже:
M1
A1
AA1
AAA1
A2
AA2
AAA2
A3
AA3
M2
B1
BB1
BBB1
B2
BB2
M3
C1
C2
C3
Первоначально иерархия будет свернута и выглядит следующим образом:
+ M1
+ M2
+ M3
Существует Expand AllОпция, по нажатию на нее должна развернуться все уровни в асинхронном порядке.У нас есть код, приведенный ниже, чтобы добиться этого:
function expandAll() {
expandAll(mainDirects);
}
function expandAll(directs){
if(!directs){
return;
}
_.each(directs, function (direct){
if(direct.IsManager){
direct.expand().then(function(node){
expandAll(node.directs)
});
}
});
}
direct.expand()
- это метод, который выполняет http-вызов службы, чтобы получить указания данного менеджера.Проблема, с которой мы столкнулись, заключается в том, что только вызов last direct на данном уровне затрагивает службу для всех направлений этого уровня, т.е. для M1 и M2 отображается иерархия M3 (как показано ниже).Поскольку это рекурсия, то же самое происходит и для последующих уровней, поэтому иерархия A1 и A2 аналогична A3.
M1
C1
AA3
C2
AA3
C3
AA3
M2
C1
BB2
C2
BB2
C3
M3
C1
C2
C3
Похоже, $http
ставит в очередь все запросы, и только последний выполняется Nраз.Есть идеи как обойти это?
Спасибо!