mirror of
https://github.com/Instadapp/Swap-Aggregator-Subgraph.git
synced 2024-07-29 21:57:12 +00:00
67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
/** PROMISIFY CALLBACK-STYLE FUNCTIONS TO ES6 PROMISES
|
|
*
|
|
* EXAMPLE:
|
|
* const fn = promisify( (callback) => callback(null, "Hello world!") );
|
|
* fn((err, str) => console.log(str));
|
|
* fn().then((str) => console.log(str));
|
|
* //Both functions, will log 'Hello world!'
|
|
*
|
|
* Note: The function you pass, may have any arguments you want, but the latest
|
|
* have to be the callback, which you will call with: next(err, value)
|
|
*
|
|
* @param method: Function/Array/Map = The function(s) to promisify
|
|
* @param options: Map =
|
|
* "context" (default is function): The context which to apply the called function
|
|
* "replace" (default is falsy): When passed an array/map, if to replace the original object
|
|
*
|
|
* @return: A promise if passed a function, otherwise the object with the promises
|
|
*
|
|
* @license: MIT
|
|
* @version: 1.0.3
|
|
* @author: Manuel Di Iorio
|
|
**/
|
|
|
|
var createCallback = function (method, context) {
|
|
return function () {
|
|
var args = Array.prototype.slice.call(arguments);
|
|
var lastIndex = args.length - 1;
|
|
var lastArg = args && args.length > 0 ? args[lastIndex] : null;
|
|
var cb = typeof lastArg === 'function' ? lastArg : null;
|
|
|
|
if (cb) {
|
|
return method.apply(context, args);
|
|
}
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
args.push(function (err, val) {
|
|
if (err) return reject(err);
|
|
resolve(val);
|
|
});
|
|
|
|
method.apply(context, args);
|
|
});
|
|
};
|
|
};
|
|
|
|
if (typeof module === "undefined") module = {}; // Browserify this module
|
|
|
|
module.exports = function (methods, options) {
|
|
options = options || {};
|
|
var type = Object.prototype.toString.call(methods);
|
|
|
|
if (type === "[object Object]" || type === "[object Array]") {
|
|
var obj = options.replace ? methods : {};
|
|
|
|
for (var key in methods) {
|
|
if (methods.hasOwnProperty(key)) obj[key] = createCallback(methods[key]);
|
|
}return obj;
|
|
}
|
|
|
|
return createCallback(methods, options.context || methods);
|
|
};
|
|
|
|
// Browserify this module
|
|
if (typeof exports === "undefined") {
|
|
this["promisify"] = module.exports;
|
|
}
|