aa-fork
Rich Harris 7 months ago
parent fe79b43e18
commit 2d92d47750

@ -96,10 +96,13 @@ export function async_derived(fn) {
throw new Error('TODO cannot create unowned async derived'); throw new Error('TODO cannot create unowned async derived');
} }
var current = /** @type {Promise<V>} */ (/** @type {unknown} */ (undefined)); /** @type {Promise<V> | undefined} */
var value = source(/** @type {V} */ (undefined)); var current = undefined;
/** @type {Source<V> | undefined} */
var value = undefined;
var derived_promise = derived(fn); var derived_promise = derived(fn);
var ran = false;
block(async () => { block(async () => {
var promise = get(derived_promise); var promise = get(derived_promise);
@ -108,8 +111,10 @@ export function async_derived(fn) {
var unsuspend = suspend(); var unsuspend = suspend();
var fork = active_fork; var fork = active_fork;
var initing = !ran;
try { try {
if (fork === null) { if (fork === null || initing) {
current = promise; current = promise;
} }
@ -119,6 +124,9 @@ export function async_derived(fn) {
return; return;
} }
if (value === undefined) {
value = source(v);
} else {
if (fork !== null) { if (fork !== null) {
restore(); restore();
@ -135,6 +143,7 @@ export function async_derived(fn) {
restore(); restore();
internal_set(value, v); internal_set(value, v);
} }
}
} catch (e) { } catch (e) {
if (fork !== null) { if (fork !== null) {
// TODO reject fork // TODO reject fork
@ -149,7 +158,11 @@ export function async_derived(fn) {
} }
}, IS_ASYNC); }, IS_ASYNC);
return Promise.resolve(current).then(() => value); ran = true;
return Promise.resolve(current).then(() => {
return /** @type {Source<V>} */ (value);
});
} }
/** /**

Loading…
Cancel
Save