Skip to content

Commit c6e0351

Browse files
committed
add resource
1 parent ba5d219 commit c6e0351

File tree

2 files changed

+25
-36
lines changed

2 files changed

+25
-36
lines changed

packages/svelte/src/internal/client/constants.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ export const EFFECT_PRESERVED = 1 << 21; // effects with this flag should not be
2424
// Flags used for async
2525
export const REACTION_IS_UPDATING = 1 << 22;
2626
export const BOUNDARY_SUSPENDED = 1 << 23;
27-
export const IS_PENDING = 1 << 24;
2827

2928
export const STATE_SYMBOL = Symbol('$state');
3029
export const STATE_SYMBOL_METADATA = Symbol('$state metadata');

packages/svelte/src/internal/client/reactivity/resources.js

Lines changed: 25 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
/** @import { Derived, Effect, Source } from '#client' */
22

3-
import { UNINITIALIZED } from '../../../constants';
4-
import { EFFECT_PRESERVED, IS_PENDING } from '../constants';
5-
import { active_effect, captured_signals, get, handle_error } from '../runtime';
6-
import { derived } from './deriveds';
7-
import { block } from './effects';
8-
import { internal_set, source } from './sources';
3+
import { UNINITIALIZED } from '../../../constants.js';
4+
import { EFFECT_PRESERVED } from '../constants.js';
5+
import { active_effect, get, handle_error } from '../runtime.js';
6+
import { derived } from './deriveds.js';
7+
import { block } from './effects.js';
8+
import { internal_set, source } from './sources.js';
99

1010
/**
1111
* @template T
@@ -29,33 +29,29 @@ export class Resource {
2929
/** @type {{}} */
3030
var current_token;
3131

32-
this.#current.f ^= IS_PENDING;
3332
this.#fn = derived(() => Promise.resolve(fn()));
3433

3534
block(() => {
36-
var current = this.#current;
37-
if ((current.f & IS_PENDING) === 0) {
38-
current.f ^= IS_PENDING;
39-
}
4035
var token = (current_token = {});
4136
internal_set(this.#pending, true);
4237

43-
get(this.#fn).then(
44-
(value) => {
45-
if (current_token !== token) return;
46-
internal_set(this.#current, value);
47-
internal_set(this.#pending, false);
48-
this.#current.f ^= IS_PENDING;
49-
return value;
50-
},
51-
(error) => {
52-
if (current_token !== token) return;
53-
internal_set(this.#pending, false);
54-
throw error;
55-
}
56-
).catch((e) => {
57-
handle_error(e, parent, null, parent.ctx);
58-
});
38+
get(this.#fn)
39+
.then(
40+
(value) => {
41+
if (current_token !== token) return;
42+
internal_set(this.#current, value);
43+
internal_set(this.#pending, false);
44+
return value;
45+
},
46+
(error) => {
47+
if (current_token !== token) return;
48+
internal_set(this.#pending, false);
49+
throw error;
50+
}
51+
)
52+
.catch((e) => {
53+
handle_error(e, parent, null, parent.ctx);
54+
});
5955
}, EFFECT_PRESERVED);
6056
}
6157

@@ -66,10 +62,6 @@ export class Resource {
6662
get current() {
6763
var value = get(this.#current);
6864

69-
if (captured_signals !== null) {
70-
get(this.#fn);
71-
}
72-
7365
if (value === UNINITIALIZED) {
7466
return this.#fn.v;
7567
}
@@ -78,12 +70,10 @@ export class Resource {
7870
}
7971

8072
get latest() {
81-
var current = this.#current;
82-
var value = get(current);
8373
var promise = get(this.#fn);
8474

85-
if ((current.f & IS_PENDING) === 0) {
86-
return value;
75+
if (!this.#pending.v) {
76+
return this.#current.v;
8777
}
8878

8979
return promise;

0 commit comments

Comments
 (0)