12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import { __assign } from './_virtual/_tslib.js';
- var defaultWaitForOptions = {
- timeout: 10000 // 10 seconds
- };
- /**
- * Subscribes to an actor ref and waits for its emitted value to satisfy
- * a predicate, and then resolves with that value.
- * Will throw if the desired state is not reached after a timeout
- * (defaults to 10 seconds).
- *
- * @example
- * ```js
- * const state = await waitFor(someService, state => {
- * return state.hasTag('loaded');
- * });
- *
- * state.hasTag('loaded'); // true
- * ```
- *
- * @param actorRef The actor ref to subscribe to
- * @param predicate Determines if a value matches the condition to wait for
- * @param options
- * @returns A promise that eventually resolves to the emitted value
- * that matches the condition
- */
- function waitFor(actorRef, predicate, options) {
- var resolvedOptions = __assign(__assign({}, defaultWaitForOptions), options);
- return new Promise(function (res, rej) {
- var done = false;
- if (process.env.NODE_ENV !== 'production' && resolvedOptions.timeout < 0) {
- console.error('`timeout` passed to `waitFor` is negative and it will reject its internal promise immediately.');
- }
- var handle = resolvedOptions.timeout === Infinity ? undefined : setTimeout(function () {
- sub.unsubscribe();
- rej(new Error("Timeout of ".concat(resolvedOptions.timeout, " ms exceeded")));
- }, resolvedOptions.timeout);
- var dispose = function () {
- clearTimeout(handle);
- done = true;
- sub === null || sub === void 0 ? void 0 : sub.unsubscribe();
- };
- var sub = actorRef.subscribe({
- next: function (emitted) {
- if (predicate(emitted)) {
- dispose();
- res(emitted);
- }
- },
- error: function (err) {
- dispose();
- rej(err);
- },
- complete: function () {
- dispose();
- rej(new Error("Actor terminated without satisfying predicate"));
- }
- });
- if (done) {
- sub.unsubscribe();
- }
- });
- }
- export { waitFor };
|