UNPKG

@algolia/autocomplete-core

Version:

Core primitives for building autocomplete experiences.

36 lines 1.37 kB
/** * Creates a runner that executes promises in a concurrent-safe way. * * This is useful to prevent older promises to resolve after a newer promise, * otherwise resulting in stale resolved values. */ export function createConcurrentSafePromise() { var basePromiseId = -1; var latestResolvedId = -1; var latestResolvedValue = undefined; return function runConcurrentSafePromise(promise) { basePromiseId++; var currentPromiseId = basePromiseId; return Promise.resolve(promise).then(function (x) { // The promise might take too long to resolve and get outdated. This would // result in resolving stale values. // When this happens, we ignore the promise value and return the one // coming from the latest resolved value. // // +----------------------------------+ // | 100ms | // | run(1) +---> R1 | // | 300ms | // | run(2) +-------------> R2 (SKIP) | // | 200ms | // | run(3) +--------> R3 | // +----------------------------------+ if (latestResolvedValue && currentPromiseId < latestResolvedId) { return latestResolvedValue; } latestResolvedId = currentPromiseId; latestResolvedValue = x; return x; }); }; }