From d76e729644ed7443c928122c5183a29b9cea107a Mon Sep 17 00:00:00 2001 From: Milan Burda Date: Sat, 28 Jul 2018 19:01:01 +0200 Subject: [PATCH] fix: util.promisify(setTimeout) --- lib/common/init.js | 12 ++++++++++-- spec/node-spec.js | 4 ++++ spec/static/main.js | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/common/init.js b/lib/common/init.js index d732352a30514..0b0374e3d00b7 100644 --- a/lib/common/init.js +++ b/lib/common/init.js @@ -1,4 +1,5 @@ const timers = require('timers') +const util = require('util') process.atomBinding = require('./atom-binding-setup')(process.binding, process.type) @@ -8,11 +9,18 @@ process.atomBinding = require('./atom-binding-setup')(process.binding, process.t // which would delay the callbacks for arbitrary long time. So we should // initiatively activate the uv loop once setImmediate and process.nextTick is // called. -var wrapWithActivateUvLoop = function (func) { - return function () { +const wrapWithActivateUvLoop = function (func) { + const wrapped = function () { process.activateUvLoop() return func.apply(this, arguments) } + if (func[util.promisify.custom]) { + wrapped[util.promisify.custom] = function () { + process.activateUvLoop() + return func[util.promisify.custom].apply(this, arguments) + } + } + return wrapped } process.nextTick = wrapWithActivateUvLoop(process.nextTick) diff --git a/spec/node-spec.js b/spec/node-spec.js index b87ed189633ad..9bb03494a56ff 100644 --- a/spec/node-spec.js +++ b/spec/node-spec.js @@ -179,6 +179,10 @@ describe('node feature', () => { it('can be scheduled in time', (done) => { remote.getGlobal('setTimeout')(done, 0) }) + + it('can be promisified', (done) => { + remote.getGlobal('setTimeoutPromisified')(0).then(done) + }) }) describe('setInterval called under Chromium event loop in browser process', () => { diff --git a/spec/static/main.js b/spec/static/main.js index d920426df3d95..2715e3f9a2071 100644 --- a/spec/static/main.js +++ b/spec/static/main.js @@ -79,6 +79,8 @@ ipcMain.on('echo', function (event, msg) { event.returnValue = msg }) +global.setTimeoutPromisified = util.promisify(setTimeout) + const coverage = new Coverage({ outputPath: path.join(__dirname, '..', '..', 'out', 'coverage') })