
A practical guide to React Router v7 that walks through declarative routing, nested layouts, dynamic routes, navigation, and protecting routes in modern React applications.

TanStack AI vs. Vercel AI SDK for React: compare isomorphic tools, type safety, and portability to pick the right SDK for production.

Handle user authentication with React Router v7, with a practical look at protected routes, two-factor authentication, and modern routing patterns.

AI now writes frontend code too. This article shows how to design architecture that stays predictable, scalable, and safe as AI accelerates development.
Would you be interested in joining LogRocket's developer community?
Join LogRocket’s Content Advisory Board. You’ll help inform the type of content we create and get access to exclusive meetups, social accreditation, and swag.
Sign up now
4 Replies to "Promise chaining is dead. Long live async/await"
well written, thanks
awaits are actually converted back to yields, which in turn are converted to closures…so the garbage collector argument does not hold. Otherwise, great post, thanks!
Nice article. But, if you have to replace Promise.all with an external library.. then Promise.all is not dead.
How do we do this level of asynchronous task in await?:
const result = await Promise.all([
independentTask,
taskA.then(resultA => {
return dependentOnTaskA(resultA)
})
])
The point is that independentTask is one work flow, and task->dependentOnTaskA is another workflow. And hence, neither should be waiting on either.