From e690967cb851d1d2611985ab727604f8ab934495 Mon Sep 17 00:00:00 2001 From: cha0s Date: Wed, 5 Jun 2019 20:12:07 -0500 Subject: [PATCH] refactor: transparently resolve traversal invocation arg promises --- packages/behavior/context/index.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/behavior/context/index.js b/packages/behavior/context/index.js index 416c108..3da4795 100644 --- a/packages/behavior/context/index.js +++ b/packages/behavior/context/index.js @@ -85,7 +85,23 @@ class Context extends Map { return node[step.key]; case 'invoke': const args = step.args.map((arg) => arg.get(this)); - return fastApply(previousNode, node, args); + // Any arg promises will be resolved; the arg values will be passed + // transparently to the invocation. + let hasPromise = false; + for (let i = 0; i < args.length; i++) { + if (args[i] instanceof Promise) { + hasPromise = true; + break; + } + } + if (hasPromise) { + return Promise.all(args).then((args) => { + return fastApply(previousNode, node, args); + }); + } + else { + return fastApply(previousNode, node, args); + } } }