From faa1e2b6ac1539479e82c5e4c588b617ddff2371 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabaadi Date: Wed, 16 Dec 2020 00:19:23 -0600 Subject: [PATCH 1/2] Add await function Co-Authored-By: Egor Malyutin <11716104+egormalyutin@users.noreply.github.com> --- index.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index cc805ed..ab0c0e2 100644 --- a/index.js +++ b/index.js @@ -70,4 +70,22 @@ module.exports.loopWhile = function (pred) { process._tickCallback() if (pred()) binding.run() } -} \ No newline at end of file +} + +module.exports.await = function(promis) { + let result + + let done = false + promis + .then(function(res) { + done = true + return result = res + }) + .catch(function(err) { + done = true + throw err + }) + + deasync.loopWhile(() => { return !done }) + return result +} From 4493e1a9c7bf296e5aeb96c82d6ccad429fb8234 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabaadi Date: Wed, 16 Dec 2020 00:27:23 -0600 Subject: [PATCH 2/2] Add tests for await Co-Authored-By: Egor Malyutin <11716104+egormalyutin@users.noreply.github.com> --- spec/app/await.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 spec/app/await.js diff --git a/spec/app/await.js b/spec/app/await.js new file mode 100644 index 0000000..b404ba4 --- /dev/null +++ b/spec/app/await.js @@ -0,0 +1,46 @@ +const deasync = require('../../index.js') + +// 1 + +function sleepAsync(time) { + return new Promise(function(resolve, reject) { + setTimeout(function() { + resolve() + }, time) + }) +} +async function trim(str) { + await sleepAsync(2000) + return str.trim() +} + +console.log(deasync.await(trim('\t hello \t'))) + + +// 2 +const timstamp = Date.now(); + +function logWithTime(...argv) { + console.log(`[${Date.now() - timstamp}]`, ...argv); +} + +function f(n) { + return new Promise(function (done) + { + setTimeout(done, n); + }) + .then(function () + { + logWithTime(n); + }); +} + +console.time(); + +f(500); +let p = f(1500); +deasync.sleep(1000); +logWithTime(1000); +deasync.await(p); + +console.timeEnd();