aboutsummaryrefslogtreecommitdiff
path: root/sandbox/testAppNevena/Front/node_modules/run-async/index.js
diff options
context:
space:
mode:
authorDanijel Andjelkovic <adanijel99@gmail.com>2022-03-01 20:21:29 +0000
committerDanijel Andjelkovic <adanijel99@gmail.com>2022-03-01 20:21:29 +0000
commit61cb1570a3410c85a4489b97c172e3a50715f36c (patch)
tree8fe4a5b77ea54bba80abc817ce2c9ef0e79e7e66 /sandbox/testAppNevena/Front/node_modules/run-async/index.js
parent21a53d349788c99d2007cba91a923db982353b31 (diff)
parenta9ee9e0a500a4a15bd0b5dcaf041f827228ed309 (diff)
Merge branch 'researchML' into 'dev'
Research ml See merge request igrannonica/neuronstellar!6
Diffstat (limited to 'sandbox/testAppNevena/Front/node_modules/run-async/index.js')
-rw-r--r--sandbox/testAppNevena/Front/node_modules/run-async/index.js98
1 files changed, 98 insertions, 0 deletions
diff --git a/sandbox/testAppNevena/Front/node_modules/run-async/index.js b/sandbox/testAppNevena/Front/node_modules/run-async/index.js
new file mode 100644
index 00000000..c7a2e65d
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/run-async/index.js
@@ -0,0 +1,98 @@
+'use strict';
+
+function isPromise(obj) {
+ return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
+}
+
+/**
+ * Return a function that will run a function asynchronously or synchronously
+ *
+ * example:
+ * runAsync(wrappedFunction, callback)(...args);
+ *
+ * @param {Function} func Function to run
+ * @param {Function} cb Callback function passed the `func` returned value
+ * @return {Function(arguments)} Arguments to pass to `func`. This function will in turn
+ * return a Promise (Node >= 0.12) or call the callbacks.
+ */
+
+var runAsync = module.exports = function (func, cb) {
+ cb = cb || function () {};
+
+ return function () {
+
+ var args = arguments;
+
+ var promise = new Promise(function (resolve, reject) {
+ var resolved = false;
+ const wrappedResolve = function (value) {
+ if (resolved) {
+ console.warn('Run-async promise already resolved.')
+ }
+ resolved = true;
+ resolve(value);
+ }
+
+ var rejected = false;
+ const wrappedReject = function (value) {
+ if (rejected) {
+ console.warn('Run-async promise already rejected.')
+ }
+ rejected = true;
+ reject(value);
+ }
+
+ var usingCallback = false;
+ var callbackConflict = false;
+ var contextEnded = false;
+
+ var answer = func.apply({
+ async: function () {
+ if (contextEnded) {
+ console.warn('Run-async async() called outside a valid run-async context, callback will be ignored.');
+ return function() {};
+ }
+ if (callbackConflict) {
+ console.warn('Run-async wrapped function (async) returned a promise.\nCalls to async() callback can have unexpected results.');
+ }
+ usingCallback = true;
+ return function (err, value) {
+ if (err) {
+ wrappedReject(err);
+ } else {
+ wrappedResolve(value);
+ }
+ };
+ }
+ }, Array.prototype.slice.call(args));
+
+ if (usingCallback) {
+ if (isPromise(answer)) {
+ console.warn('Run-async wrapped function (sync) returned a promise but async() callback must be executed to resolve.');
+ }
+ } else {
+ if (isPromise(answer)) {
+ callbackConflict = true;
+ answer.then(wrappedResolve, wrappedReject);
+ } else {
+ wrappedResolve(answer);
+ }
+ }
+ contextEnded = true;
+ });
+
+ promise.then(cb.bind(null, null), cb);
+
+ return promise;
+ }
+};
+
+runAsync.cb = function (func, cb) {
+ return runAsync(function () {
+ var args = Array.prototype.slice.call(arguments);
+ if (args.length === func.length - 1) {
+ args.push(this.async());
+ }
+ return func.apply(this, args);
+ }, cb);
+};