From e7efd4b5244563aa33b8107fd8d1b9f68ce28d57 Mon Sep 17 00:00:00 2001 From: Tissevert Date: Sun, 2 Dec 2018 00:19:52 +0100 Subject: [PATCH] Add a parallel operator in the async monad --- src/async.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/async.js b/src/async.js index 61dc206..cfedefd 100644 --- a/src/async.js +++ b/src/async.js @@ -1,6 +1,7 @@ function Async() { return { bind: bind, + parallel: parallel, run: run, sequence: sequence, wait: wait, @@ -15,6 +16,26 @@ function Async() { } } + function parallel() { + var threads = arguments; + var pending = threads.length; + var results = []; + return function(f) { + var useResult = function(i) { + return function(x) { + results[i] = x; + pending--; + if(pending < 1) { + f(results); + } + }; + }; + for(var i = 0; i < threads.length; i++) { + threads[i](useResult(i)); + } + }; + } + function run() { var m; if(arguments.length == 1) {