angular/packages/misc/angular-in-memory-web-api/src/delay-response.ts
Joey Perrott ec03e462f3 refactor: migrate bazel, benchpress, elements and misc to prettier formatting (#53995)
Migrate formatting to prettier for bazel, benchpress, elements and misc from clang-format

PR Close #53995
2024-01-22 09:07:15 +01:00

39 lines
1.1 KiB
TypeScript

/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {Observable} from 'rxjs';
// Replaces use of RxJS delay. See v0.5.4.
/** adds specified delay (in ms) to both next and error channels of the response observable */
export function delayResponse<T>(response$: Observable<T>, delayMs: number): Observable<T> {
return new Observable<T>((observer) => {
let completePending = false;
let nextPending = false;
const subscription = response$.subscribe(
(value) => {
nextPending = true;
setTimeout(() => {
observer.next(value);
if (completePending) {
observer.complete();
}
}, delayMs);
},
(error) => setTimeout(() => observer.error(error), delayMs),
() => {
completePending = true;
if (!nextPending) {
observer.complete();
}
},
);
return () => {
return subscription.unsubscribe();
};
});
}