---
name: "up.RenderResult.prototype.finished"
area: "API"
kind: "Property"
parent: "up.RenderResult class"
url: "https://unpoly.com/api/up.RenderResult.prototype.finished"
---
<nav aria-label="Unpoly docs">[All docs](https://unpoly.com/index.md) · [up.RenderResult class](https://unpoly.com/api/up.RenderResult.md)</nav>

# up.RenderResult.prototype.finished

A promise that settles when no further DOM changes will be caused by this render pass.

In particular:

- [Animations](https://unpoly.com/api/up.motion.md) have concluded and [transitioned](https://unpoly.com/api/up-transition.md) elements were removed from the DOM tree.
- A [cached response](https://unpoly.com/api/up.render.md#options.cache) was [revalidated with the server](https://unpoly.com/learn/caching.md#revalidation). If the server has responded with new content, this content has also been rendered.

The promise resolves to the last [`up.RenderResult`](https://unpoly.com/api/up.RenderResult.md) that updated a fragment. If [revalidation](https://unpoly.com/learn/caching.md#revalidation) re-rendered the fragment, it is the result from the second render pass. If no revalidation was performed, or if revalidation yielded an [empty response](https://unpoly.com/learn/caching.md#when-nothing-changed), it is the result from the initial render pass.

The promise will reject if the server sends an error status, if there is a network issue, or if targets could not be matched.

Also see [Awaiting postprocessing](https://unpoly.com/learn/render-lifecycle.md#postprocessing).

<nav aria-label="Contents">

#### Contents

- [Example](#example)
- [Value](#value)

</nav>

## Example {#example}

```js
let result = await up.render({ url: '/path' }).finished
console.log(result.fragments)
```

---

## Value {#value}

### finished {#finished}

A promise that settles after all DOM changes.

Type: [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)<[up.RenderResult](https://unpoly.com/api/up.RenderResult.md)>

