Home / Function/ async() — svelte Function Reference

async() — svelte Function Reference

Architecture documentation for the async() function in async.js from the svelte codebase.

Entity Profile

Dependency Diagram

graph TD
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f["async()"]
  0ae9bf62_aa68_bcd6_7a5c_a9620e877659["async.js"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|defined in| 0ae9bf62_aa68_bcd6_7a5c_a9620e877659
  b31601aa_35ce_7827_5394_99fb97fa27d2["hydrate_next()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| b31601aa_35ce_7827_5394_99fb97fa27d2
  8bcc1a1c_73ab_4fe7_59be_b28bbe88fd3e["skip_nodes()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| 8bcc1a1c_73ab_4fe7_59be_b28bbe88fd3e
  db550759_ee3b_160c_8afa_d1aa9fae478c["fn()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| db550759_ee3b_160c_8afa_d1aa9fae478c
  40f27ad3_30bb_8f2a_3fb3_757088cf7428["set_hydrate_node()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| 40f27ad3_30bb_8f2a_3fb3_757088cf7428
  2c67b85b_d904_f73c_3422_6086d51dc1d1["get_boundary()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| 2c67b85b_d904_f73c_3422_6086d51dc1d1
  2ba0836c_3ec9_0e68_f2ba_cf1bb3adc645["is_rendered()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| 2ba0836c_3ec9_0e68_f2ba_cf1bb3adc645
  95fd9978_b635_37dc_dfee_13c687d48cd6["update_pending_count()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| 95fd9978_b635_37dc_dfee_13c687d48cd6
  ab9c13ec_1c6d_0b81_72f5_188dfda4191b["increment()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| ab9c13ec_1c6d_0b81_72f5_188dfda4191b
  b9aaaccb_7510_28de_bb53_f808b2cb1d5e["flatten()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| b9aaaccb_7510_28de_bb53_f808b2cb1d5e
  f5b61c69_d41c_bdb7_b931_5b8b3374332c["set_hydrating()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| f5b61c69_d41c_bdb7_b931_5b8b3374332c
  a08b6cc5_af73_1be4_d02f_3113cf8a8305["get()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| a08b6cc5_af73_1be4_d02f_3113cf8a8305
  d3725093_785a_922d_c180_94a562b1a49b["decrement()"]
  4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f -->|calls| d3725093_785a_922d_c180_94a562b1a49b
  style 4de7f5ce_83b2_1bef_8e42_34d4dcb4c29f fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/internal/client/dom/blocks/async.js lines 21–79

export function async(node, blockers = [], expressions = [], fn) {
	var was_hydrating = hydrating;
	var end = null;

	if (was_hydrating) {
		hydrate_next();
		end = skip_nodes(false);
	}

	if (expressions.length === 0 && blockers.every((b) => b.settled)) {
		fn(node);

		// This is necessary because it is not guaranteed that the render function will
		// advance the hydration node to $.async's end marker: it may stop at an inner
		// block's end marker (in case of an inner if block for example), but it also may
		// stop at the correct $.async end marker (in case of component child) - hence
		// we can't just use hydrate_next()
		// TODO this feels indicative of a bug elsewhere; ideally we wouldn't need
		// to double-traverse in the already-resolved case
		if (was_hydrating) {
			set_hydrate_node(end);
		}

		return;
	}

	var boundary = get_boundary();
	var batch = /** @type {Batch} */ (current_batch);
	var blocking = boundary.is_rendered();

	boundary.update_pending_count(1);
	batch.increment(blocking);

	if (was_hydrating) {
		var previous_hydrate_node = hydrate_node;
		set_hydrate_node(end);
	}

	flatten(blockers, [], expressions, (values) => {
		if (was_hydrating) {
			set_hydrating(true);
			set_hydrate_node(previous_hydrate_node);
		}

		try {
			// get values eagerly to avoid creating blocks if they reject
			for (const d of values) get(d);

			fn(node, ...values);
		} finally {
			if (was_hydrating) {
				set_hydrating(false);
			}

			boundary.update_pending_count(-1);
			batch.decrement(blocking);
		}
	});
}

Domain

Subdomains

Frequently Asked Questions

What does async() do?
async() is a function in the svelte codebase, defined in packages/svelte/src/internal/client/dom/blocks/async.js.
Where is async() defined?
async() is defined in packages/svelte/src/internal/client/dom/blocks/async.js at line 21.
What does async() call?
async() calls 12 function(s): decrement, flatten, fn, get, get_boundary, hydrate_next, increment, is_rendered, and 4 more.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free