Бесконечная загрузка страницы, как исправить?

Ссылка скопирована
1 ответ

Была идея сделать функцию которая принимает три массива которые я забираю из API.

window.addEventListener('DOMContentLoaded', async () => {   try {     const orderDataPromise = getOrderData();     const workDataPromise = getWorkData();     const workObjectDataPromise = getWorkObjectData();      const orderData = await orderDataPromise;     const workData = await workDataPromise;     const workObjectData = await workObjectDataPromise;      processing(orderData, workData, workObjectData);   } catch (error) {     console.log(error);   } });  function getOrderData() {   return fetch('http://:3000/orderIdget')     .then(response => response.json())     .then(data => console.log(data))     .catch(error => console.log(error)); }  function getWorkData() {   return fetch('http://:3000/information')     .then(response => response.json())     .then(data => console.log(data))     .catch(error => console.log(error)); }  function getWorkObjectData() {   return fetch('http://:3000/Work_object')     .then(response => response.json())     .then(data => console.log(data))     .catch(error => console.log(error)); }  function processing (orderData, workData, workObjectData){ console.log(orderData, workData, workObjectData); }

window.addEventListener('DOMContentLoaded', async () => { try { const orderDataPromise = getOrderData(); const workDataPromise = getWorkData(); const workObjectDataPromise = getWorkObjectData(); const orderData = await orderDataPromise; const workData = await workDataPromise; const workObjectData = await workObjectDataPromise; processing(orderData, workData, workObjectData); } catch (error) { console.log(error); } }); function getOrderData() { return fetch('http://:3000/orderIdget') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.log(error)); } function getWorkData() { return fetch('http://:3000/information') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.log(error)); } function getWorkObjectData() { return fetch('http://:3000/Work_object') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.log(error)); } function processing (orderData, workData, workObjectData){ console.log(orderData, workData, workObjectData); }

и тут всё работает и всё хорошо мне нужно эти 3 массива объединить в один
по этому пишу

function processing (orderData, workData, workObjectData){   console.log("доступны и в функции", orderData, workData, workObjectData);   for (let i = 0; i < orderData.length; i++) {     const orderId = orderData[i].order_id;     const matchingWorkItems = workData.filter(workItem => workItem.id_order === orderId);      // Добавляем name_object в текущий элемент orderData, если есть соответствующие элементы в workData     if (matchingWorkItems.length > 0) {       matchingWorkItems.forEach(workItem => {         orderData.splice(i + 1, 0, { ...orderData[i], name_object: workItem.name_object });       });     }   } }

function processing (orderData, workData, workObjectData){ console.log("доступны и в функции", orderData, workData, workObjectData); for (let i = 0; i < orderData.length; i++) { const orderId = orderData[i].order_id; const matchingWorkItems = workData.filter(workItem => workItem.id_order === orderId); // Добавляем name_object в текущий элемент orderData, если есть соответствующие элементы в workData if (matchingWorkItems.length > 0) { matchingWorkItems.forEach(workItem => { orderData.splice(i + 1, 0, { ...orderData[i], name_object: workItem.name_object }); }); } } }

по идеи эта функция должна была делать следующие, так как в массиве orderData и workData, есть общий item, а если быть точнее, то item.order_id. и мне нужно следующее если item.order_id из массива orderData и item.order_id из массива workData равны между собой, то тогда в массив orderData дозапишется item.name_object из массива workData. Но вместо этого я получил бесконечную загрузку страницы

Дополнительно:

window.addEventListener('DOMContentLoaded', async () => {

перепишите.

window.addEventListener('DOMContentLoaded', ()=>{     Promise.all([getOrderData(), getWorkData(), getWorkObjectData()])         .then(fetched=>processing(fetched[0], fetched[1], fetched[2])         .catch((reason)=>{console.error(reason)} }

window.addEventListener('DOMContentLoaded', ()=>{ Promise.all([getOrderData(), getWorkData(), getWorkObjectData()]) .then(fetched=>processing(fetched[0], fetched[1], fetched[2]) .catch((reason)=>{console.error(reason)} }

Причина, по которой у меня возникала бесконечная загрузка, заключается в том, что когда я изменял массив orderData внутри цикла for. Это приводит к изменению длины массива, а следовательно, к изменению условия цикла for, которое проверяет i < orderData.length. В результате, цикл может выполняться бесконечное количество раз, вызывая бесконечную загрузку.
Проблему решил так

function processing (orderData, workData, workObjectData){   console.log("доступны и в функции", orderData, workData, workObjectData);   const updatedOrderData = [];   for (let i = 0; i &lt; orderData.length; i++) {     const orderId = orderData[i].order_id;     const matchingWorkItems = workData.filter(workItem =&gt; workItem.id_order === orderId);     if (matchingWorkItems.length &gt; 0) {       matchingWorkItems.forEach(workItem =&gt; {         updatedOrderData.push({ ...orderData[i], name_object: workItem.name_object });       });     }     updatedOrderData.push(orderData[i]);   }   console.log("updatedOrderData", updatedOrderData); }

function processing (orderData, workData, workObjectData){ console.log("доступны и в функции", orderData, workData, workObjectData); const updatedOrderData = []; for (let i = 0; i &lt; orderData.length; i++) { const orderId = orderData[i].order_id; const matchingWorkItems = workData.filter(workItem =&gt; workItem.id_order === orderId); if (matchingWorkItems.length &gt; 0) { matchingWorkItems.forEach(workItem =&gt; { updatedOrderData.push({ ...orderData[i], name_object: workItem.name_object }); }); } updatedOrderData.push(orderData[i]); } console.log("updatedOrderData", updatedOrderData); }

так же хочу поблагодарить iljaGolubev за подсказку по оптимизации

  • не вдаваясь, что вы получаете с бэка и почему не готовите данные там.
    вы создаёте новый массив updatedOrderData .. ну ОК раз надо.
    но вот дублировать в нём orderData[i] - точно не ок.

    вот вам ещё информация для размышления.

    function processing(orderData, workData) {     console.log("доступны и в функции", orderData, workData);       return workData.reduce(         (acc, work, workItemIdx) =&gt; {             if (acc['order-' + work.id_order] === undefined) {                 const orderDataIdx = orderData.findIndex(o =&gt; o.id_order == work.id_order);                 if (orderDataIdx &lt; 0) {                     return acc;                 }                 acc['order-' + work.id_order] = { orderDataIdx, workItemIndexes: [] }             }             acc['order-' + work.id_order].workItemIndexes.push(workItemIdx)             return acc         },         {} /* acc */     ) }  const o = [{ id_order: 111, date: "X" }, { id_order: 333, date: "Y" }]; const w = [{ id_order: 111, name_object: "X-name1" }, { id_order: 111, name_object: "X-name2" }, { id_order: 333, name_object: "Y-name1" }] const indexed = processing(o, w);  console.log('Indexed', indexed) console.log("Order 111", { date: o[indexed['order-111'].orderDataIdx].date, item_names: indexed['order-111'].workItemIndexes.map(i =&gt; w[i].name_object).join(', ') }) console.log("Order 333", { date: o[indexed['order-333'].orderDataIdx].date, item_names: indexed['order-333'].workItemIndexes.map(i =&gt; w[i].name_object).join(', ') })

    function processing(orderData, workData) { console.log("доступны и в функции", orderData, workData); return workData.reduce( (acc, work, workItemIdx) =&gt; { if (acc['order-' + work.id_order] === undefined) { const orderDataIdx = orderData.findIndex(o =&gt; o.id_order == work.id_order); if (orderDataIdx &lt; 0) { return acc; } acc['order-' + work.id_order] = { orderDataIdx, workItemIndexes: [] } } acc['order-' + work.id_order].workItemIndexes.push(workItemIdx) return acc }, {} /* acc */ ) } const o = [{ id_order: 111, date: "X" }, { id_order: 333, date: "Y" }]; const w = [{ id_order: 111, name_object: "X-name1" }, { id_order: 111, name_object: "X-name2" }, { id_order: 333, name_object: "Y-name1" }] const indexed = processing(o, w); console.log('Indexed', indexed) console.log("Order 111", { date: o[indexed['order-111'].orderDataIdx].date, item_names: indexed['order-111'].workItemIndexes.map(i =&gt; w[i].name_object).join(', ') }) console.log("Order 333", { date: o[indexed['order-333'].orderDataIdx].date, item_names: indexed['order-333'].workItemIndexes.map(i =&gt; w[i].name_object).join(', ') })

Ответы:

Патамушта.

o=[1,2,3]; console.log('o.len : ',o.length) // можно убрать &amp;&amp; i&lt;10 for(let i=0;i&lt;o.length &amp;&amp; i&lt;10; i++){     o.splice(i+1,0,'added_'+i);     console.log('NEW o.len : ',o.length) }

o=[1,2,3]; console.log('o.len : ',o.length) // можно убрать &amp;&amp; i&lt;10 for(let i=0;i&lt;o.length &amp;&amp; i&lt;10; i++){ o.splice(i+1,0,'added_'+i); console.log('NEW o.len : ',o.length) }

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Никита Орлов Ответ

Для начала, если у вас возникает проблема с бесконечной загрузкой страницы, вам следует выполнить несколько шагов для ее устранения:

1. Проверьте ваш интернет-соединение. Убедитесь, что у вас стабильное соединение с Интернетом, чтобы исключить возможность проблем с сетью.

2. Очистите кэш браузера. Накопленные данные в кэше браузера могут привести к проблемам с загрузкой страницы. Попробуйте очистить кэш и историю браузера.

3. Проверьте наличие обновлений. Убедитесь, что ваш браузер и операционная система обновлены до последних версий, так как устаревшие версии могут вызывать проблемы с загрузкой страниц.

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

Если после выполнения этих шагов проблема не решится, можно попробовать следующее:

- Проверьте консоль разработчика в браузере на наличие ошибок. Часто информация об ошибках может помочь в определении причины проблемы.
- Попробуйте открыть страницу в другом браузере или на другом устройстве, чтобы исключить возможные проблемы с текущим браузером или устройством.
- Если у вас есть доступ к коду страницы, проверьте его на наличие ошибок, которые могут приводить к бесконечной загрузке.

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

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно