663488cf52
Adds support for nested `unstable_after()`. This pattern previously threw a "Not supported yet" error, but works now: ```js function MyComponent() { after(() => asyncWork()); return <div>...</div> } async function asyncWork() { after(() => { /* look ma, nesting!*/ }) // more stuff... } ``` ### Implementation notes Switched `AfterContext` to use a proper promise queue ([`p-queue`](https://www.npmjs.com/package/p-queue)) instead of plain a callback array to support adding more callbacks as we execute (i.e. from nested `after`s). Used a package because I didn't want to reinvent the wheel here. As a nice bonus, `p-queue` lets us limit the concurrency of running tasks if we're worried about resource consumption. **This PR doesn't do that**, but it's very easy to add. That could be controlled via `process.env.NEXT_AFTER_MAX_CONCURRENT_TASKS`, a next.config.js option (`unstable_after: { maxConcurrentTasks: 5 }`), or something like that. |
||
---|---|---|
.. | ||
create-next-app | ||
eslint-config-next | ||
eslint-plugin-next | ||
font | ||
next | ||
next-bundle-analyzer | ||
next-codemod | ||
next-env | ||
next-mdx | ||
next-plugin-storybook | ||
next-polyfill-module | ||
next-polyfill-nomodule | ||
next-swc | ||
react-refresh-utils | ||
third-parties |