diff --git a/src/index.js b/src/index.js
index 7c743ad3..9d59f229 100644
--- a/src/index.js
+++ b/src/index.js
@@ -156,7 +156,8 @@ export const createInstance = (defaultProps = {}) => {
{state => {
if (state.data === undefined) return null
- if (state.isLoading && !persist) return null
+ if (!persist && state.isLoading) return null
+ if (!persist && state.error !== undefined) return null
return isFunction(children) ? children(state.data, state) : children || null
}}
diff --git a/src/spec.js b/src/spec.js
index 8bd1aa69..95279abe 100644
--- a/src/spec.js
+++ b/src/spec.js
@@ -373,3 +373,43 @@ test("An unrelated change in props does not update the Context", async () => {
)
expect(one).toBe(two)
})
+
+test("Async.Resolved does not render after deferFn rejection", async () => {
+ const promiseFn = () => resolveTo("ok")
+ const deferFn = () => rejectTo("notok")
+ const { getByText, queryByText } = render(
+
+ fail
+ {(data, { run }) => }
+
+ )
+
+ expect(queryByText("next")).toBeNull()
+ await waitForElement(() => getByText("next"))
+ expect(queryByText("next")).toBeInTheDocument()
+ expect(queryByText("fail")).toBeNull()
+ fireEvent.click(getByText("next"))
+ await waitForElement(() => getByText("fail"))
+ expect(queryByText("next")).toBeNull()
+ expect(queryByText("fail")).toBeInTheDocument()
+})
+
+test("Async.Resolved renders after deferFn rejection with persist", async () => {
+ const promiseFn = () => resolveTo("ok")
+ const deferFn = () => rejectTo("notok")
+ const { getByText, queryByText } = render(
+
+ fail
+ {(data, { run }) => }
+
+ )
+
+ expect(queryByText("next")).toBeNull()
+ await waitForElement(() => getByText("next"))
+ expect(queryByText("next")).toBeInTheDocument()
+ expect(queryByText("fail")).toBeNull()
+ fireEvent.click(getByText("next"))
+ await waitForElement(() => getByText("fail"))
+ expect(queryByText("next")).toBeInTheDocument()
+ expect(queryByText("fail")).toBeInTheDocument()
+})