diff --git a/packages/core/src/bind/connectObservable.test.tsx b/packages/core/src/bind/connectObservable.test.tsx
index 7b52dad7..883e2b76 100644
--- a/packages/core/src/bind/connectObservable.test.tsx
+++ b/packages/core/src/bind/connectObservable.test.tsx
@@ -5,7 +5,7 @@ import {
screen,
} from "@testing-library/react"
import { act, renderHook } from "@testing-library/react-hooks"
-import React, { Suspense, useEffect, FC } from "react"
+import React, { Suspense, useEffect, FC, StrictMode } from "react"
import {
BehaviorSubject,
defer,
@@ -15,6 +15,7 @@ import {
throwError,
Observable,
merge,
+ NEVER,
} from "rxjs"
import {
delay,
@@ -491,4 +492,20 @@ describe("connectObservable", () => {
expect(errorCallback).not.toHaveBeenCalled()
})
+
+ it("should not trigger suspense when the stream emits synchronously", () => {
+ const [useValue] = bind(NEVER.pipe(startWith("Hello")))
+
+ const Component: FC = () => <>{useValue()}>
+ render(
+
+ Loading...}>
+
+
+ ,
+ )
+
+ expect(screen.queryByText("Loading...")).toBeNull()
+ expect(screen.queryByText("Hello")).not.toBeNull()
+ })
})
diff --git a/packages/core/src/internal/react-enhancer.ts b/packages/core/src/internal/react-enhancer.ts
index 8957b7f7..79abaf1e 100644
--- a/packages/core/src/internal/react-enhancer.ts
+++ b/packages/core/src/internal/react-enhancer.ts
@@ -49,7 +49,10 @@ const reactEnhancer = (source$: BehaviorObservable): (() => T) => {
promise = undefined
})
- if (value !== EMPTY_VALUE) return value
+ if (value !== EMPTY_VALUE) {
+ promise = undefined
+ return value
+ }
throw error !== EMPTY_VALUE ? error : promise
}