Map.prototype.size shows 0 in first render Javascript

Viewed 18

I have a Promise that can run multiple fetch requests, after I make request, I am getting response with Map(). Then sending this data with useContext (setResponse(newResponses);). But I am having a problem because response.size equals to 0 -zero. But there is data inside. After I change something inside useEffect, the page rerenders and shows me response.size 1. I couldn't understand where I make mistake.

Promise.allSettled(promises).then((results) => {
        const newResponses = new Map(response); //?

        results.forEach(async (result) => {
          // get url as it is used as key in the Maps
          const url = new URL(result.value.url).pathname;

          if (result.status === 'fulfilled' && result.value.ok) {
            // get response data
            const data = await result.value.json();

            setRequests((prev) => {
              
              prev.delete(url);

              return prev;
            });

            newResponses.set(url, data); //?

            
          } else {
           
            setHeaderStates((prev) => ({
              ...prev,
              reload: true,
              isSaving: false,
            }));
            setFetchRequestData((prev) => ({
              ...prev,
              isErrorMessageHidden: false,
              errorMessage: 'Server request failed.',
            }));
          }
        });
        setResponse(newResponses);
      });

code above from custom hook

code below from the page

useEffect(() => {
   
    console.log(response.size);

  }, [response, router, setResponse]);
0 Answers
Related