317
*/
318
export function topAsync<T>(array: T[], compare: (a: T, b: T) => number, n: number, batch: number, token?: CancellationToken): Promise<T[]> {
320
>
return Promise.resolve([]);
321
>
}
322
>
323
>
return new Promise((resolve, reject) => {
324
>
(async () => {
325
>
const o = array.length;
326
>
const result = array.slice(0, n).sort(compare);
327
>
for (let i = n, m = Math.min(n + batch, o); i < o; i = m, m = Math.min(m + batch, o)) {
328
>
if (i > n) {
329
>
await new Promise(resolve => setTimeout(resolve)); // any other delay function would starve I/O
330
>
}
331
>
if (token && token.isCancellationRequested) {
332
throw new CancellationError();
333
}
334
>
topStep(array, compare, result, i, m);
arrays.ts
335
>
}
336
>
return result;
337
>
})()
338
>
.then(resolve, reject);
339
>
});
340
>
}
341
342
function topStep<T>(array: ReadonlyArray<T>, compare: (a: T, b: T) => number, result: T[], i: number, m: number): void {