Как избежать ошибки кода состояния 429 в Javascript - время ожидания сеанса или превышение предела скорости - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь использовать 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);
            });
...