UNPKG

backendless-coderunner

Version:
61 lines (47 loc) 1.24 kB
'use strict' /** * Wraps a NodeJS continuation passing function and returns an equivalent version that returns a promise. * An analogue to the Q.denodeify * * @param {function} fn * @param {Object=} context * * @returns {function} */ exports.promisifyNode = function(fn, context) { return function() { const args = Array.prototype.slice.call(arguments) return new Promise((resolve, reject) => { args.push((err, value) => err ? reject(err) : resolve(value)) fn.apply(context || this, args) }) } } exports.promisifyNodeAll = function(obj, keys) { keys = keys || Object.keys(obj) keys.forEach(key => { if (typeof obj[key] === 'function') { obj[key] = exports.promisifyNode(obj[key]) } }) return obj } exports.wait = function(ms) { return new Promise(resolve => { setTimeout(resolve, ms) }) } class TimeoutError extends Error { } exports.timeoutRejector = function(ms, msg) { msg = msg || `Timeout after ${ms} ms` let timer const promise = new Promise((resolve, reject) => { timer = setTimeout(() => reject(new TimeoutError(msg)), ms) }) promise.cancel = () => { clearTimeout(timer) } return promise } exports.timeoutRejector.Error = TimeoutError