77 useEventListener ,
88 useIntersectionObserver ,
99} from '@vueuse/core'
10+ import { tryOnScopeDispose } from '@vueuse/shared'
1011import type { ElementScriptTrigger } from '../types'
1112
1213export interface ElementScriptTriggerOptions {
@@ -23,7 +24,7 @@ export interface ElementScriptTriggerOptions {
2324
2425function 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