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");