From fb534a3d501be11347d43dbc59e1063be91ec1fb Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 30 Jan 2019 14:26:55 -0500 Subject: [PATCH 1/5] return promise from nextTick --- src/internal/scheduler.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/internal/scheduler.js b/src/internal/scheduler.js index 4d9f9ad388..bc4e14b96d 100644 --- a/src/internal/scheduler.js +++ b/src/internal/scheduler.js @@ -4,14 +4,13 @@ import { set_current_component } from './lifecycle.js'; export let dirty_components = []; export const intros = { enabled: false }; -let update_scheduled = false; +let update_promise; const binding_callbacks = []; const render_callbacks = []; export function schedule_update() { - if (!update_scheduled) { - update_scheduled = true; - queue_microtask(flush); + if (!update_promise) { + update_promise = Promise.resolve().then(flush); } } @@ -22,6 +21,7 @@ export function add_render_callback(fn) { export function nextTick(fn) { add_render_callback(fn); schedule_update(); + return update_promise; } export function add_binding_callback(fn) { @@ -56,7 +56,7 @@ export function flush() { } } while (dirty_components.length); - update_scheduled = false; + update_promise = null; } function update($$) { @@ -68,10 +68,4 @@ function update($$) { $$.after_render.forEach(add_render_callback); } -} - -function queue_microtask(callback) { - Promise.resolve().then(() => { - if (update_scheduled) callback(); - }); } \ No newline at end of file From 3c1734c1fc022133f65685e0ab128f2d4924d7c9 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 30 Jan 2019 14:27:39 -0500 Subject: [PATCH 2/5] make callback optional --- src/internal/scheduler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/internal/scheduler.js b/src/internal/scheduler.js index bc4e14b96d..7292c85f07 100644 --- a/src/internal/scheduler.js +++ b/src/internal/scheduler.js @@ -19,7 +19,7 @@ export function add_render_callback(fn) { } export function nextTick(fn) { - add_render_callback(fn); + if (fn) add_render_callback(fn); schedule_update(); return update_promise; } From 3ea5f3b8f0e93180acca730316e3c2b1c9469375 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 30 Jan 2019 15:06:06 -0500 Subject: [PATCH 3/5] rename to tick, remove callback interface --- index.mjs | 2 +- src/internal/scheduler.js | 3 +-- test/runtime/samples/lifecycle-next-tick/main.html | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/index.mjs b/index.mjs index 768b53f626..ee5b575171 100644 --- a/index.mjs +++ b/index.mjs @@ -5,6 +5,6 @@ export { afterUpdate, setContext, getContext, - nextTick, + tick, createEventDispatcher } from './internal'; diff --git a/src/internal/scheduler.js b/src/internal/scheduler.js index 7292c85f07..717a5c7ff4 100644 --- a/src/internal/scheduler.js +++ b/src/internal/scheduler.js @@ -18,8 +18,7 @@ export function add_render_callback(fn) { render_callbacks.push(fn); } -export function nextTick(fn) { - if (fn) add_render_callback(fn); +export function tick() { schedule_update(); return update_promise; } diff --git a/test/runtime/samples/lifecycle-next-tick/main.html b/test/runtime/samples/lifecycle-next-tick/main.html index f7a889d433..0c577c20e8 100644 --- a/test/runtime/samples/lifecycle-next-tick/main.html +++ b/test/runtime/samples/lifecycle-next-tick/main.html @@ -1,5 +1,5 @@