Path: blob/master/node_modules/@protobufjs/aspromise/index.js
1126 views
"use strict";1module.exports = asPromise;23/**4* Callback as used by {@link util.asPromise}.5* @typedef asPromiseCallback6* @type {function}7* @param {Error|null} error Error, if any8* @param {...*} params Additional arguments9* @returns {undefined}10*/1112/**13* Returns a promise from a node-style callback function.14* @memberof util15* @param {asPromiseCallback} fn Function to call16* @param {*} ctx Function context17* @param {...*} params Function arguments18* @returns {Promise<*>} Promisified function19*/20function asPromise(fn, ctx/*, varargs */) {21var params = new Array(arguments.length - 1),22offset = 0,23index = 2,24pending = true;25while (index < arguments.length)26params[offset++] = arguments[index++];27return new Promise(function executor(resolve, reject) {28params[offset] = function callback(err/*, varargs */) {29if (pending) {30pending = false;31if (err)32reject(err);33else {34var params = new Array(arguments.length - 1),35offset = 0;36while (offset < params.length)37params[offset++] = arguments[offset];38resolve.apply(null, params);39}40}41};42try {43fn.apply(ctx || null, params);44} catch (err) {45if (pending) {46pending = false;47reject(err);48}49}50});51}525354