diff --git a/src/cmd.js b/src/cmd.js index e0a0b1f..3c3a767 100644 --- a/src/cmd.js +++ b/src/cmd.js @@ -201,10 +201,18 @@ const external_imports_loaded = ( toplevel = false } - return modules_evaluated(state, result, node, toplevel) + if(result.then != null) { + return {...state, + eval_modules_state: { + promise: result, node, toplevel, + } + } + } else { + return eval_modules_finished(state, result, node, toplevel) + } } -const modules_evaluated = (state, result, node, toplevel) => { +const eval_modules_finished = (state, result, node, toplevel) => { const next = apply_eval_result(state, result) let active_calltree_node @@ -837,6 +845,7 @@ export const COMMANDS = { move_cursor, eval_selection, external_imports_loaded, + eval_modules_finished, on_deferred_call, calltree: calltree_commands, } diff --git a/src/effects.js b/src/effects.js index 2cd99d1..18f481e 100644 --- a/src/effects.js +++ b/src/effects.js @@ -176,6 +176,13 @@ export const render_common_side_effects = async (prev, next, command, ui) => { load_external_imports(next) } + if(prev.eval_modules_state != next.eval_modules_state) { + const s = next.eval_modules_state + s.promise.then(result => { + exec('eval_modules_finished', result, s.node, s.toplevel) + }) + } + if(prev.parse_result != next.parse_result) { render_parse_result(ui, next) } diff --git a/test/test.js b/test/test.js index 3d16136..3a53335 100644 --- a/test/test.js +++ b/test/test.js @@ -2589,7 +2589,7 @@ const y = x()` assert_equal(get_deferred_calls(result), null) }), - test_only('async/await', () => { + test('async/await', () => { const code = ` const x = async () => 123 const y = async () => await x()