asyncFind

by Bjoeni

JavaScript

function asyncFind(array, findFunction) {
  return new Promise(resolve => {
    let i = 0;
    array.forEach(async item => {
      if (await findFunction(await item)) {
        resolve(item);
        return;
      }
      i++;
      if (array.length == i) {
        resolve(undefined);
      }
    });
  });
}

function makePromise(delay, result) {
	return new Promise(resolve => {
  	setTimeout(() => resolve(result), delay * 1000);
  });
}

async function test(expected) {
  console.log("Looking for " + expected);
  var t = performance.now();
  var arr = [makePromise(1, 1), makePromise(2, 2), makePromise(3, 3), makePromise(4, 4), makePromise(5, 5)];
  
  var result = await asyncFind(arr, result => result == expected);
  
  var t2 = performance.now();
  console.log((result ? "found " : "didn't find ") + expected + " after " + (t2 - t) + " ms");
}

test(1);
test(3);
test("foo");