defer(() => {
let buffer = [];
return source$.pipe(
withLatestFrom(trigger$),
tap(([src]) => buffer.push(src)),
mergeMap(([src, trigger]) => trigger ? buffer : NEVER),
tap(() => buffer = []),
)
});
startWith(false)
для начального значенияbuffer
, но чет не придумалось. function doSomething(param: string, value: unknown) {
console.log('doSomething', param, value);
}
function WebworkerParam(param: string){
return (target: any, key: PropertyKey) => {
let subscription: Subscription;
let innerValue: any;
Object.defineProperty(target, key, {
get() {
return innerValue;
},
set(value) {
if (subscription)
subscription.unsubscribe();
if(value instanceof BehaviorSubject)
subscription = value.subscribe(newValue => doSomething(param, newValue));
else
doSomething(param, value);
innerValue = value;
}
})
}
}
BehaviorSubject
не стоит, не одному тебе потом с ним работать.class DistinctBehaviorSubject<T> extends BehaviorSubject<T> {
next(value: T) {
if (this.value !== value)
super.next(value);
}
}
Но я на вскидку не скажу какие тут могут быть подводные камни.) str.split(/(?<=\S)\s*(?=[А-ЯЁ])/).join(' ')
// или
str.replace(/(?<=\S)(?=[А-ЯЁ])/g, ' ')
// или
str.replace(/(\S)(?=[А-ЯЁ])/g, '$1 ')
// или
str.replace(/[А-ЯЁ]/g, (m, i) => i && str[~-i] !== ' ' ? ' ' + m : m)
function request(url) {
return new Observable(observer => {
const controller = new AbortController()
const signal = controller.signal
signal.addEventListener("abort", () => observer.complete());
fetch(url, { signal })
.then(res => {
observer.next(res);
observer.complete();
})
.catch((err) => {
observer.error(err);
observer.complete();
});
return () => controller.abort();
});
}
const RunOutsideAngular = (target: any, memberName: string) => {
const method = target[memberName];
return Object.defineProperty(target, memberName, {
writable: true,
configurable: true,
value(...args: any[]) {
return this.ngZone.runOutsideAngular(method.bind(this, ...args))
}
});
};
const RunOutsideAngularAll = (constructor: Function) => {
const keys = new Set<string>();
let proto = constructor.prototype;
do {
if(proto === Object.prototype) break;
Object.getOwnPropertyNames(proto).forEach(
key => typeof proto[key] === 'function'
&& key !== 'constructor'
&& keys.add(key)
);
} while (
proto = Object.getPrototypeOf(proto)
);
keys.forEach(key => RunOutsideAngular(constructor.prototype, key));
}
class SomeClass {
@RunOutsideAngular
myFunc() {
mycode.....
}
}
// или
@RunOutsideAngularAll
class SomeClass {
myFunc() {
mycode.....
}
}
RunOutsideAngular
- по-хорошему надо типизировать дженериком под ангуляр.RunOutsideAngularAll
- обрабатывает все методы и функции, в т.ч. унаследованные, можно упростить чтоб работал только с методами текущего класса.