diff --git a/src/module.js b/src/module.js index 5f1610e9..47ff3557 100644 --- a/src/module.js +++ b/src/module.js @@ -47,14 +47,15 @@ function module_variable(observer) { return new Variable(TYPE_NORMAL, this, observer); } -function module_value(name) { +async function module_value(name) { var v = this._scope.get(name); if (!v) throw new RuntimeError(name + " is not defined"); if (v._observer === no_observer) { v._observer = true; this._runtime._dirty.add(v); } - return this._runtime._compute().then(() => v._promise); + await this._runtime._compute(); + return v._promise; } function module_derive(injects, injectModule) { diff --git a/test/module/value-test.js b/test/module/value-test.js index 431937c1..27836056 100644 --- a/test/module/value-test.js +++ b/test/module/value-test.js @@ -62,6 +62,18 @@ tape("module.value(name) supports missing variables", async test => { } }); +tape("module.value(name) returns a promise on error", async test => { + const runtime = new Runtime(); + const module = runtime.module(); + const promise = module.value("bar"); + try { + await promise; + test.fail(); + } catch (error) { + test.deepEqual(error.message, "bar is not defined"); + } +}); + tape("module.value(name) does not force recomputation", async test => { let foo = 0; const runtime = new Runtime();