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

Loading…
Cancel
Save