CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes45downloads
wrapSync.js118 linesDownload Raw Back to async
1'use strict';2 3Object.defineProperty(exports, "__esModule", {4    value: true5});6exports.default = asyncify;7 8var _initialParams = require('./internal/initialParams.js');9 10var _initialParams2 = _interopRequireDefault(_initialParams);11 12var _setImmediate = require('./internal/setImmediate.js');13 14var _setImmediate2 = _interopRequireDefault(_setImmediate);15 16var _wrapAsync = require('./internal/wrapAsync.js');17 18function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }19 20/**21 * Take a sync function and make it async, passing its return value to a22 * callback. This is useful for plugging sync functions into a waterfall,23 * series, or other async functions. Any arguments passed to the generated24 * function will be passed to the wrapped function (except for the final25 * callback argument). Errors thrown will be passed to the callback.26 *27 * If the function passed to `asyncify` returns a Promise, that promises's28 * resolved/rejected state will be used to call the callback, rather than simply29 * the synchronous return value.30 *31 * This also means you can asyncify ES2017 `async` functions.32 *33 * @name asyncify34 * @static35 * @memberOf module:Utils36 * @method37 * @alias wrapSync38 * @category Util39 * @param {Function} func - The synchronous function, or Promise-returning40 * function to convert to an {@link AsyncFunction}.41 * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be42 * invoked with `(args..., callback)`.43 * @example44 *45 * // passing a regular synchronous function46 * async.waterfall([47 *     async.apply(fs.readFile, filename, "utf8"),48 *     async.asyncify(JSON.parse),49 *     function (data, next) {50 *         // data is the result of parsing the text.51 *         // If there was a parsing error, it would have been caught.52 *     }53 * ], callback);54 *55 * // passing a function returning a promise56 * async.waterfall([57 *     async.apply(fs.readFile, filename, "utf8"),58 *     async.asyncify(function (contents) {59 *         return db.model.create(contents);60 *     }),61 *     function (model, next) {62 *         // `model` is the instantiated model object.63 *         // If there was an error, this function would be skipped.64 *     }65 * ], callback);66 *67 * // es2017 example, though `asyncify` is not needed if your JS environment68 * // supports async functions out of the box69 * var q = async.queue(async.asyncify(async function(file) {70 *     var intermediateStep = await processFile(file);71 *     return await somePromise(intermediateStep)72 * }));73 *74 * q.push(files);75 */76function asyncify(func) {77    if ((0, _wrapAsync.isAsync)(func)) {78        return function (...args /*, callback*/) {79            const callback = args.pop();80            const promise = func.apply(this, args);81            return handlePromise(promise, callback);82        };83    }84 85    return (0, _initialParams2.default)(function (args, callback) {86        var result;87        try {88            result = func.apply(this, args);89        } catch (e) {90            return callback(e);91        }92        // if result is Promise object93        if (result && typeof result.then === 'function') {94            return handlePromise(result, callback);95        } else {96            callback(null, result);97        }98    });99}100 101function handlePromise(promise, callback) {102    return promise.then(value => {103        invokeCallback(callback, null, value);104    }, err => {105        invokeCallback(callback, err && (err instanceof Error || err.message) ? err : new Error(err));106    });107}108 109function invokeCallback(callback, error, value) {110    try {111        callback(error, value);112    } catch (err) {113        (0, _setImmediate2.default)(e => {114            throw e;115        }, err);116    }117}118module.exports = exports.default;
basant307/AI_Governance_Project · CoolFace