Я пытаюсь использовать Javascript для обхода дерева с помощью алгоритма DFS, и мне нужно сделать вызовы на сервер, чтобы получить узлы дерева, когда я продвигаюсь в обходе.
как то так:
var id = "000000";
var url = "https://test.data.com/"+id;
var self = this;
выборки (URL, (данные) => {
var data = JSON.parse (data);
если (Array.isArray (data.assets)) {
var promises = data.assets.map ((n, i) => {
вернуть self.getNode (n);
})
Promise.all (обещания) .Затем (результаты => Разрешая (результаты))
}
});
так выглядит первый ответ (https://test.data.com/000000")
данные = {
id: "111",
Уровень: 0,
активы: ["12345", "685783", "685783", "685783]
}
Теперь с этим я пытаюсь пройти глубже через узлы, передавая эти идентификаторы на указанный выше URL, как в приведенном выше случае, у меня есть 4 идентификатора, и я хочу пройтись по всем из них по одному, сделав позвоните по URL и передайте идентификатор.
fetch(https://test.data.com/12345", (data)=>{
//will give say this o/p
data = {
id: "111",
level:1,
assets: ["434344"]
}
})
Затем я беру идентификатор, предоставленный на уровне 1, и передаю его URL-адресу и т. Д., Пока не достигну цели, а затем снова начну с второго элемента в активах, который имеет level:0
, и продолжаю обходить его.
Моя проблема в том, что мне нужно вызывать URL-адрес каждый раз, когда я хочу перейти на следующий уровень nde, т.е. чтобы получить его дочерние элементы. Я сталкиваюсь с ошибкой status code 429 too many requests
и пытаюсь справиться с этим через setTimeout
. Но следующее не работает для меня. Кроме того, я не уверен, что это правильный подход для решения такого рода ошибок состояния. Есть идеи, как к этому подойти?
fetch(url,(data)=>{
var data = JSON.parse(data);
if(Array.isArray(data.assets)){
setTimeout(function(){
var promises = data.assets.map((n,i)=>{
return self.getNode(n);
})
Promise.all(promises).then(results=>resolve(results))
}
},300000);
});