diff --git a/package-lock.json b/package-lock.json index 4b7d951..1e6e3a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vue-use-async", - "version": "1.8.6", + "version": "1.8.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vue-use-async", - "version": "1.8.6", + "version": "1.8.7", "license": "MIT", "os": [ "darwin", diff --git a/package.json b/package.json index bd18224..1e3ca6a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue-use-async", - "version": "1.8.6", + "version": "1.8.7", "description": "Xhr and async helpers", "repository": { "type": "git", diff --git a/src/useResult.ts b/src/useResult.ts index f797c2c..1440aeb 100644 --- a/src/useResult.ts +++ b/src/useResult.ts @@ -37,11 +37,15 @@ export default function >( _res.value = map(defaultRes as Res); } + // prevent infinite loop because of _res/res changes + let disableWatch = false; + watchEffect(() => { if (res) { const unWrapRes = unref(res); if (unWrapRes !== undefined) { + disableWatch = true; _res.value = map?.(unWrapRes); } } @@ -50,14 +54,17 @@ export default function >( watch( () => _res.value, (v) => { - if (res.value === undefined) { + if (v === undefined || res.value === undefined) { return; } - if (v !== res.value) { - // @ts-ignore - res.value = new Result(v); + if (disableWatch) { + disableWatch = false; + return; } + + // @ts-ignore + res.value = new Result(v); }, );