By promise I assume you mean the async/await. The fetching of data in useEffect is the perfect place to make a call to an async function. The refresh should not be that often if fetching lots of data but even if it were it would just queue up due to the async/promise.
Their are other libraries that might be better solutions too such as react-query and useSWR. I just wanted to give a fairly vanilla approach.