24 lines
845 B
JavaScript
24 lines
845 B
JavaScript
import { runPolling } from "./poller";
|
|
import { validateWaiterOptions } from "./utils";
|
|
import { waiterServiceDefaults, WaiterState } from "./waiter";
|
|
const abortTimeout = async (abortSignal) => {
|
|
return new Promise((resolve) => {
|
|
abortSignal.onabort = () => resolve({ state: WaiterState.ABORTED });
|
|
});
|
|
};
|
|
export const createWaiter = async (options, input, acceptorChecks) => {
|
|
const params = {
|
|
...waiterServiceDefaults,
|
|
...options,
|
|
};
|
|
validateWaiterOptions(params);
|
|
const exitConditions = [runPolling(params, input, acceptorChecks)];
|
|
if (options.abortController) {
|
|
exitConditions.push(abortTimeout(options.abortController.signal));
|
|
}
|
|
if (options.abortSignal) {
|
|
exitConditions.push(abortTimeout(options.abortSignal));
|
|
}
|
|
return Promise.race(exitConditions);
|
|
};
|