Estoy construyendo un pequeño prototipo como feeds. Tengo una variedad de muchos artículos. Para cada elemento de una matriz, necesito realizar una llamada a la API y cargar los resultados.
Es un problema de rendimiento si tengo demasiados registros y demasiadas llamadas APi para realizar.
Estoy tratando de detener mi bucle por cada 2-3 llamadas API durante 100 ms y luego reanudar la ejecución hasta que se complete la matriz.
Hice un POC pero no funciona bien. ¿Puedes ayudarme con lo que está mal en el siguiente código?
// work in progress var arr = ["val1", "val2", "val3", "val4", "val5", "val6"]; let breakCounter; async function seriesAPI(arr) { breakCounter = 2; for (let i = 0; i <= arr.length; i++) { if (breakCounter - arr.indexOf(arr[i]) === 0) { await interval(arr[i]); breakCounter = breakCounter + 2; } else { makeAPI(arr[i]) //console.log(arr[i]); } } } function makeAPI(val) { console.log(val); // fetch(url, {method: 'POST', body: JSON.stringify(arr[i])}).then(res => console.log(res)); } function interval(arrval) { console.log("Buffer time"); setTimeout(() => { makeAPI(arrval) }, 1000); } seriesAPI(arr);Le sugiero que envuelva su método de interval como Promise y lo llame en iteración de bucle cuando sea necesario antes de solicitar la obtención.
var arr = ["val1", "val2", "val3", "val4", "val5", "val6"]; async function seriesAPI(arr) { for (let i = 0; i <= arr.length; i++) { if (!(i % 3)) { // on each 3rd iteration await interval(100); // make 100ms delay } makeAPI(arr[i]) // console.log(arr[i]); } } function makeAPI(val) { console.log(val); // fetch(url, {method: 'POST', body: JSON.stringify(arr[i])}).then(res => console.log(res)); } function interval(ms) { return new Promise(r => setTimeout(r, ms)); // auto-resolve after [ms] milliseconds } seriesAPI(arr);No hay necesidad de asíncrono
var arr = ["val1", "val2", "val3", "val4", "val5", "val6"]; let cnt = 0; function makeAPI() { if (cnt >= arr.length) return console.log(arr[cnt]); // fetch(url, {method: 'POST', body: JSON.stringify(arr[cnt])}) // .then(res => setTimeout(makeAPI,cnt%3 === 0 ? 3000: 100)); cnt++; setTimeout(makeAPI,cnt%3 === 0 ? 3000: 100); } makeAPI()