diff options
Diffstat (limited to 'node_modules/mongoose/lib/helpers/promiseOrCallback.js')
-rw-r--r-- | node_modules/mongoose/lib/helpers/promiseOrCallback.js | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/node_modules/mongoose/lib/helpers/promiseOrCallback.js b/node_modules/mongoose/lib/helpers/promiseOrCallback.js new file mode 100644 index 0000000..a1aff55 --- /dev/null +++ b/node_modules/mongoose/lib/helpers/promiseOrCallback.js @@ -0,0 +1,45 @@ +'use strict'; + +const PromiseProvider = require('../promise_provider'); + +const emittedSymbol = Symbol.for('mongoose:emitted'); + +module.exports = function promiseOrCallback(callback, fn, ee) { + if (typeof callback === 'function') { + return fn(function(error) { + if (error != null) { + if (ee != null && ee.listeners('error').length > 0 && !error[emittedSymbol]) { + error[emittedSymbol] = true; + ee.emit('error', error); + } + try { + callback(error); + } catch (error) { + return process.nextTick(() => { + throw error; + }); + } + return; + } + callback.apply(this, arguments); + }); + } + + const Promise = PromiseProvider.get(); + + return new Promise((resolve, reject) => { + fn(function(error, res) { + if (error != null) { + if (ee != null && ee.listeners('error').length > 0 && !error[emittedSymbol]) { + error[emittedSymbol] = true; + ee.emit('error', error); + } + return reject(error); + } + if (arguments.length > 2) { + return resolve(Array.prototype.slice.call(arguments, 1)); + } + resolve(res); + }); + }); +};
\ No newline at end of file |