Harden Async's parallel against one call returning several times

This commit is contained in:
Tissevert 2019-01-13 20:29:48 +01:00
parent 75f02b2c0b
commit 52a7e883fa

View file

@ -39,14 +39,18 @@ function Async() {
var threads = arguments; var threads = arguments;
var pending = threads.length; var pending = threads.length;
var results = []; var results = [];
var returned = [];
return function(f) { return function(f) {
var useResult = function(i) { var useResult = function(i) {
return function(x) { return function(x) {
if(!returned[i]) {
results[i] = x; results[i] = x;
returned[i] = true;
pending--; pending--;
if(pending < 1) { if(pending < 1) {
f(results); f(results);
} }
}
}; };
}; };
for(var i = 0; i < threads.length; i++) { for(var i = 0; i < threads.length; i++) {