Skip to content

Commit ac2d774

Browse files
committed
fix infinit loop if map is used in useResult
1 parent 8215deb commit ac2d774

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-use-async",
3-
"version": "1.8.6",
3+
"version": "1.8.7",
44
"description": "Xhr and async helpers",
55
"repository": {
66
"type": "git",

src/useResult.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,15 @@ export default function <T, Z extends T, U = Res<T, Z>>(
3737
_res.value = map(defaultRes as Res<T, Z>);
3838
}
3939

40+
// prevent infinite loop because of _res/res changes
41+
let disableWatch = false;
42+
4043
watchEffect(() => {
4144
if (res) {
4245
const unWrapRes = unref<any>(res);
4346

4447
if (unWrapRes !== undefined) {
48+
disableWatch = true;
4549
_res.value = map?.(unWrapRes);
4650
}
4751
}
@@ -50,14 +54,17 @@ export default function <T, Z extends T, U = Res<T, Z>>(
5054
watch(
5155
() => _res.value,
5256
(v) => {
53-
if (res.value === undefined) {
57+
if (v === undefined || res.value === undefined) {
5458
return;
5559
}
5660

57-
if (v !== res.value) {
58-
// @ts-ignore
59-
res.value = new Result(v);
61+
if (disableWatch) {
62+
disableWatch = false;
63+
return;
6064
}
65+
66+
// @ts-ignore
67+
res.value = new Result(v);
6168
},
6269
);
6370

0 commit comments

Comments
 (0)