Skip to content

Commit 7297783

Browse files
committed
fix(useScriptTriggerElement): reject promises on scope dispose
1 parent af13a30 commit 7297783

1 file changed

Lines changed: 14 additions & 5 deletions

File tree

src/runtime/composables/useScriptTriggerElement.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
useEventListener,
88
useIntersectionObserver,
99
} from '@vueuse/core'
10+
import { tryOnScopeDispose } from '@vueuse/shared'
1011
import type { ElementScriptTrigger } from '../types'
1112

1213
export interface ElementScriptTriggerOptions {
@@ -23,7 +24,7 @@ export interface ElementScriptTriggerOptions {
2324

2425
function useElementVisibilityPromise(element: MaybeComputedElementRef) {
2526
let observer: UseIntersectionObserverReturn
26-
return new Promise<void>((resolve) => {
27+
return new Promise<void>((resolve, reject) => {
2728
observer = useIntersectionObserver(
2829
element,
2930
(intersectionObserverEntries) => {
@@ -38,9 +39,14 @@ function useElementVisibilityPromise(element: MaybeComputedElementRef) {
3839
threshold: 0,
3940
},
4041
)
41-
}).finally(() => {
42-
observer.stop()
42+
tryOnScopeDispose(reject)
4343
})
44+
.catch(() => {
45+
// it's okay
46+
})
47+
.finally(() => {
48+
observer.stop()
49+
})
4450
}
4551

4652
/**
@@ -57,16 +63,19 @@ export function useScriptTriggerElement(options: ElementScriptTriggerOptions): P
5763
return Promise.resolve()
5864
if (!triggers.includes('immediate')) {
5965
// TODO optimize this, only have 1 instance of intersection observer, stop on find
60-
return new Promise<void>((resolve) => {
66+
return new Promise<void>((resolve, reject) => {
6167
const _ = useEventListener(
6268
typeof el !== 'undefined' ? (el as EventTarget) : document.body,
6369
triggers,
6470
() => {
65-
resolve()
6671
_()
72+
resolve()
6773
},
6874
{ once: true, passive: true },
6975
)
76+
tryOnScopeDispose(reject)
77+
}).catch(() => {
78+
// it's okay
7079
})
7180
}
7281
return Promise.resolve()

0 commit comments

Comments
 (0)