Plato on Github
Report Home
node_modules/when/lib/decorators/unhandledRejection.js
Maintainability
77.81
Lines of code
98
Difficulty
28.88
Estimated Errors
0.73
Function weight
By Complexity
By SLOC
/** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ (function(define) { 'use strict'; define(function(require) { var timer = require('../timer'); return function unhandledRejection(Promise) { var logError = noop; var logInfo = noop; if(typeof console !== 'undefined') { logError = typeof console.error !== 'undefined' ? function (e) { console.error(e); } : function (e) { console.log(e); }; logInfo = typeof console.info !== 'undefined' ? function (e) { console.info(e); } : function (e) { console.log(e); }; } Promise.onPotentiallyUnhandledRejection = function(rejection) { enqueue(report, rejection); }; Promise.onPotentiallyUnhandledRejectionHandled = function(rejection) { enqueue(unreport, rejection); }; Promise.onFatalRejection = function(rejection) { enqueue(throwit, rejection.value); }; var tasks = []; var reported = []; var running = false; function report(r) { if(!r.handled) { reported.push(r); logError('Potentially unhandled rejection [' + r.id + '] ' + formatError(r.value)); } } function unreport(r) { var i = reported.indexOf(r); if(i >= 0) { reported.splice(i, 1); logInfo('Handled previous rejection [' + r.id + '] ' + formatObject(r.value)); } } function enqueue(f, x) { tasks.push(f, x); if(!running) { running = true; running = timer.set(flush, 0); } } function flush() { running = false; while(tasks.length > 0) { tasks.shift()(tasks.shift()); } } return Promise; }; function formatError(e) { var s = typeof e === 'object' && e.stack ? e.stack : formatObject(e); return e instanceof Error ? s : s + ' (WARNING: non-Error used)'; } function formatObject(o) { var s = String(o); if(s === '[object Object]' && typeof JSON !== 'undefined') { s = tryStringify(o, s); } return s; } function tryStringify(e, defaultValue) { try { return JSON.stringify(e); } catch(e) { // Ignore. Cannot JSON.stringify e, stick with String(e) return defaultValue; } } function throwit(e) { throw e; } function noop() {} }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));