module.exports = function (promise, timeout, opts) { var Promise = promise.constructor; var rejectWith = opts && opts.rejectWith; var resolveWith = opts && opts.resolveWith; var timer; var timeoutPromise = new Promise(function (resolve, reject) { timer = setTimeout(function () { if (rejectWith !== void 0) reject(rejectWith); else resolve(resolveWith); }, timeout); }); return Promise.race([timeoutPromise, promise]) .then(function (value) { // For browser support: timer.unref is only available in Node. if (timer.unref) timer.unref(); return value; }, function (error) { // For browser support: timer.unref is only available in Node. if (timer.unref) timer.unref(); throw error; }); };