async_derived() — svelte Function Reference
Architecture documentation for the async_derived() function in deriveds.js from the svelte codebase.
Entity Profile
Dependency Diagram
graph TD a387a36f_f417_a149_0b1a_ee4a1da63440["async_derived()"] 2fb8b3eb_7c25_3930_a184_09fab29d537f["deriveds.js"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|defined in| 2fb8b3eb_7c25_3930_a184_09fab29d537f b9aaaccb_7510_28de_bb53_f808b2cb1d5e["flatten()"] b9aaaccb_7510_28de_bb53_f808b2cb1d5e -->|calls| a387a36f_f417_a149_0b1a_ee4a1da63440 b137f422_7d3c_218c_aaf9_1be0299ad652["async_derived_orphan()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| b137f422_7d3c_218c_aaf9_1be0299ad652 1e2f7428_6050_5cb7_69db_bf5db719f6d1["source()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| 1e2f7428_6050_5cb7_69db_bf5db719f6d1 b2eacc8a_e339_c7cd_329a_2445c4d5ac44["async_effect()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| b2eacc8a_e339_c7cd_329a_2445c4d5ac44 ca823eda_572f_96a7_a6c1_3275230578c1["deferred()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| ca823eda_572f_96a7_a6c1_3275230578c1 db550759_ee3b_160c_8afa_d1aa9fae478c["fn()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| db550759_ee3b_160c_8afa_d1aa9fae478c 08445b6d_4083_dc8c_99d0_a3d4553d06cb["save()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| 08445b6d_4083_dc8c_99d0_a3d4553d06cb a0b8f840_863f_a966_d259_b866f80703d1["deactivate()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| a0b8f840_863f_a966_d259_b866f80703d1 df71411d_ad64_65b8_da29_e77890377349["unset_context()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| df71411d_ad64_65b8_da29_e77890377349 2ba0836c_3ec9_0e68_f2ba_cf1bb3adc645["is_rendered()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| 2ba0836c_3ec9_0e68_f2ba_cf1bb3adc645 95fd9978_b635_37dc_dfee_13c687d48cd6["update_pending_count()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| 95fd9978_b635_37dc_dfee_13c687d48cd6 a08b6cc5_af73_1be4_d02f_3113cf8a8305["get()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| a08b6cc5_af73_1be4_d02f_3113cf8a8305 63ee8247_ada4_9f1d_e139_0c1167cd5b1c["set()"] a387a36f_f417_a149_0b1a_ee4a1da63440 -->|calls| 63ee8247_ada4_9f1d_e139_0c1167cd5b1c style a387a36f_f417_a149_0b1a_ee4a1da63440 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/svelte/src/internal/client/reactivity/deriveds.js lines 99–242
export function async_derived(fn, label, location) {
let parent = /** @type {Effect | null} */ (active_effect);
if (parent === null) {
e.async_derived_orphan();
}
var boundary = /** @type {Boundary} */ (parent.b);
var promise = /** @type {Promise<V>} */ (/** @type {unknown} */ (undefined));
var signal = source(/** @type {V} */ (UNINITIALIZED));
if (DEV) signal.label = label;
// only suspend in async deriveds created on initialisation
var should_suspend = !active_reaction;
/** @type {Map<Batch, ReturnType<typeof deferred<V>>>} */
var deferreds = new Map();
async_effect(() => {
if (DEV) current_async_effect = active_effect;
/** @type {ReturnType<typeof deferred<V>>} */
var d = deferred();
promise = d.promise;
try {
// If this code is changed at some point, make sure to still access the then property
// of fn() to read any signals it might access, so that we track them as dependencies.
// We call `unset_context` to undo any `save` calls that happen inside `fn()`
Promise.resolve(fn())
.then(d.resolve, d.reject)
.then(() => {
if (batch === current_batch && batch.committed) {
// if the batch was rejected as stale, we need to cleanup
// after any `$.save(...)` calls inside `fn()`
batch.deactivate();
}
unset_context();
});
} catch (error) {
d.reject(error);
unset_context();
}
if (DEV) current_async_effect = null;
var batch = /** @type {Batch} */ (current_batch);
if (should_suspend) {
var blocking = boundary.is_rendered();
boundary.update_pending_count(1);
batch.increment(blocking);
deferreds.get(batch)?.reject(STALE_REACTION);
deferreds.delete(batch); // delete to ensure correct order in Map iteration below
deferreds.set(batch, d);
}
/**
* @param {any} value
* @param {unknown} error
*/
const handler = (value, error = undefined) => {
current_async_effect = null;
batch.activate();
if (error) {
if (error !== STALE_REACTION) {
signal.f |= ERROR_VALUE;
// @ts-expect-error the error is the wrong type, but we don't care
internal_set(signal, error);
}
} else {
if ((signal.f & ERROR_VALUE) !== 0) {
signal.f ^= ERROR_VALUE;
Domain
Subdomains
Calls
Called By
Source
Frequently Asked Questions
What does async_derived() do?
async_derived() is a function in the svelte codebase, defined in packages/svelte/src/internal/client/reactivity/deriveds.js.
Where is async_derived() defined?
async_derived() is defined in packages/svelte/src/internal/client/reactivity/deriveds.js at line 99.
What does async_derived() call?
async_derived() calls 18 function(s): activate, async_derived_orphan, async_effect, await_waterfall, deactivate, decrement, deferred, fn, and 10 more.
What calls async_derived()?
async_derived() is called by 1 function(s): flatten.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free