Format src/runtime/internal/await_block.js

pull/8569/head
S. Elliott Johnson 3 years ago
parent 5a93b97f5f
commit d5761c85c5

@ -1,21 +1,23 @@
import { is_promise } from './utils'; import { is_promise } from './utils.js';
import { check_outros, group_outros, transition_in, transition_out } from './transitions'; import { check_outros, group_outros, transition_in, transition_out } from './transitions.js';
import { flush } from './scheduler'; import { flush } from './scheduler.js';
import { get_current_component, set_current_component } from './lifecycle'; import { get_current_component, set_current_component } from './lifecycle.js';
/** @param {Promise<T>} promise
/**
* @param {Promise<T>} promise
* @param {PromiseInfo<T>} info * @param {PromiseInfo<T>} info
* @returns {boolean} * @returns {boolean}
*/ */
export function handle_promise(promise, info) { export function handle_promise(promise, info) {
const token = (info.token = {}); const token = (info.token = {});
/** @param {FragmentFactory} type /**
* @param {FragmentFactory} type
* @param {0 | 1 | 2} index * @param {0 | 1 | 2} index
* @param {number} key * @param {number} key
* @returns {void} * @returns {void}
*/ */
function update(type, index, key, value) { function update(type, index, key, value) {
if (info.token !== token) if (info.token !== token) return;
return;
info.resolved = value; info.resolved = value;
let child_ctx = info.ctx; let child_ctx = info.ctx;
if (key !== undefined) { if (key !== undefined) {
@ -37,8 +39,7 @@ export function handle_promise(promise, info) {
check_outros(); check_outros();
} }
}); });
} } else {
else {
info.block.d(1); info.block.d(1);
} }
block.c(); block.c();
@ -47,33 +48,34 @@ export function handle_promise(promise, info) {
needs_flush = true; needs_flush = true;
} }
info.block = block; info.block = block;
if (info.blocks) if (info.blocks) info.blocks[index] = block;
info.blocks[index] = block;
if (needs_flush) { if (needs_flush) {
flush(); flush();
} }
} }
if (is_promise(promise)) { if (is_promise(promise)) {
const current_component = get_current_component(); const current_component = get_current_component();
promise.then((value) => { promise.then(
(value) => {
set_current_component(current_component); set_current_component(current_component);
update(info.then, 1, info.value, value); update(info.then, 1, info.value, value);
set_current_component(null); set_current_component(null);
}, (error) => { },
(error) => {
set_current_component(current_component); set_current_component(current_component);
update(info.catch, 2, info.error, error); update(info.catch, 2, info.error, error);
set_current_component(null); set_current_component(null);
if (!info.hasCatch) { if (!info.hasCatch) {
throw error; throw error;
} }
}); }
);
// if we previously had a then/catch block, destroy it // if we previously had a then/catch block, destroy it
if (info.current !== info.pending) { if (info.current !== info.pending) {
update(info.pending, 0); update(info.pending, 0);
return true; return true;
} }
} } else {
else {
if (info.current !== info.then) { if (info.current !== info.then) {
update(info.then, 1, info.value, promise); update(info.then, 1, info.value, promise);
return true; return true;
@ -81,6 +83,7 @@ export function handle_promise(promise, info) {
info.resolved = promise; info.resolved = promise;
} }
} }
/** @returns {void} */ /** @returns {void} */
export function update_await_block_branch(info, ctx, dirty) { export function update_await_block_branch(info, ctx, dirty) {
const child_ctx = ctx.slice(); const child_ctx = ctx.slice();
@ -94,9 +97,6 @@ export function update_await_block_branch(info, ctx, dirty) {
info.block.p(child_ctx, dirty); info.block.p(child_ctx, dirty);
} }
/** @typedef {Object} PromiseInfo /** @typedef {Object} PromiseInfo
* @property {null|any} ctx * @property {null|any} ctx
* @property {{}} token * @property {{}} token

Loading…
Cancel
Save