Остановить все Javascript выполнение (на стороне клиента) на основании указанного c разрешения любого обещания - PullRequest
0 голосов
/ 08 апреля 2020

Я перебираю несколько вызовов API и хотел бы остановиться, если получу код состояния 429 (слишком много запросов).

Я не могу придумать, как на самом деле это сделать. Я хотел просто разбить l oop, но я получил ошибку компиляции "Illegal break операция"

for (let i = 0; i < 150000; i++) {
callAPI(i).then((data)=>{
            if(data.status === 404){addData("APICalls", {GroupDeleted:i})};
            if(data.status === 200){addData("APICalls", data);};
            if(data.status === 429){console.log("Too Many Requests: " + i); <Stop execution>;};     
            });
}

async function callAPI(ID) {
    let data = await fetch(`...my fetch...`
    return await data.json();
}

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020
let stop = false;

for (let i = 0; i < 150000; i++) {
if(stop){
  break;
}
callAPI(i).then((data)=>{
            if(data.status === 404){addData("APICalls", {GroupDeleted:i})};
            if(data.status === 200){addData("APICalls", data);};
            if(data.status === 429){console.log("Too Many Requests: " + i) **stop=true**; <Stop execution>;};     
            });
}

async function callAPI(ID) {
    let data = await fetch(`...my fetch...`
    return await data.json();

}`enter code here`

Не могли бы вы попробовать этот код?

0 голосов
/ 08 апреля 2020

Ниже я обрисовал возможное решение, но, боюсь, это значительно задержит выполнение, поскольку программа ожидает ответов на каждый запрос.

for (let i = 0; i < 150000; i++) {
   let data = await callApi(i);
   // Do stuff with data
   if( data.status === 429 ) break;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...