diff options
author | Andrew Webster <awebster@arcx.com> | 2018-09-14 11:18:11 -0400 |
---|---|---|
committer | Milian Wolff <milian.wolff@kdab.com> | 2019-04-10 08:54:00 +0000 |
commit | b4342f3567ec08a959f132bc1ef0c4f8eb89bcf8 (patch) | |
tree | 0c18d5996f8a3dd945ad6e064b04d9d614195e1b /examples | |
parent | d7ece941aebdac1be820fdfe74c273fb963dfcad (diff) | |
download | qtwebchannel-b4342f3567ec08a959f132bc1ef0c4f8eb89bcf8.tar.gz |
Return a Promise when no callback is provided for a function call
This returns a Promise if Promise is supported and no callback
is provided. The Promise resolves when the function call succeeds,
or rejects when it fails.
Change-Id: I529f5c2c0ff8997820f3d1b4d4b364cd8521e9b5
Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/webchannel/shared/qwebchannel.js | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/examples/webchannel/shared/qwebchannel.js b/examples/webchannel/shared/qwebchannel.js index 6cc3690..fca45d9 100644 --- a/examples/webchannel/shared/qwebchannel.js +++ b/examples/webchannel/shared/qwebchannel.js @@ -346,6 +346,7 @@ function QObject(name, data, webChannel) object[methodName] = function() { var args = []; var callback; + var errCallback; for (var i = 0; i < arguments.length; ++i) { var argument = arguments[i]; if (typeof argument === "function") @@ -358,6 +359,17 @@ function QObject(name, data, webChannel) args.push(argument); } + var result; + // during test, webChannel.exec synchronously calls the callback + // therefore, the promise must be constucted before calling + // webChannel.exec to ensure the callback is set up + if (!callback && (typeof(Promise) === 'function')) { + result = new Promise(function(resolve, reject) { + callback = resolve; + errCallback = reject; + }); + } + webChannel.exec({ "type": QWebChannelMessageTypes.invokeMethod, "object": object.__id__, @@ -369,8 +381,12 @@ function QObject(name, data, webChannel) if (callback) { (callback)(result); } + } else if (errCallback) { + (errCallback)(); } }); + + return result; }; } |