Size: a a a

Angular - русскоговорящее сообщество

2019 October 16

EG

Egor Gorbachev in Angular - русскоговорящее сообщество
Подскажите как через RxJS описать поток, который эмитит данные с произвольной задержкой, пример на async/await:

await sleep(3000);
console.log(1);
await sleep(2500);
console.log(2);
await sleep(300);
console.log(3)
источник

L

Let me take you into the light in Angular - русскоговорящее сообщество
Egor Gorbachev
Подскажите как через RxJS описать поток, который эмитит данные с произвольной задержкой, пример на async/await:

await sleep(3000);
console.log(1);
await sleep(2500);
console.log(2);
await sleep(300);
console.log(3)
 Observable.create(function(observer) {
setTimeout(() => observer.next(1), 3000)
setTimeout(() => observer.next(2), 2500)
setTimeout(() => observer.next(3), 300)
setTimeout(() => observer.next(1),  0)
});
источник

L

Let me take you into the light in Angular - русскоговорящее сообщество
Ну думаю можно лутше, просто первое что в голову пришло
источник

L

Let me take you into the light in Angular - русскоговорящее сообщество
Как-то через delay
источник

EG

Egor Gorbachev in Angular - русскоговорящее сообщество
Да вот тоже не пойму как это через delay сделать, подход с ручным setTimeout громоздкий.
источник

L

Let me take you into the light in Angular - русскоговорящее сообщество
Egor Gorbachev
Да вот тоже не пойму как это через delay сделать, подход с ручным setTimeout громоздкий.
Можно сделать массив [3000, 2500, 300, 0] -> сделать map и на каждый елемент массива делать next + apply delay
источник

R

RA-TA-TATA in Angular - русскоговорящее сообщество
подскажите, можно ли написать асинхронный валидатор на Observable а не на Promise?
источник

R

RA-TA-TATA in Angular - русскоговорящее сообщество
просто сколько смотрю, не пишут возвращаемый тип
источник

L

Let me take you into the light in Angular - русскоговорящее сообщество
RA-TA-TATA
подскажите, можно ли написать асинхронный валидатор на Observable а не на Promise?
Какой тип валидации, он связан с API?
источник

R

RA-TA-TATA in Angular - русскоговорящее сообщество
Let me take you into the light
Какой тип валидации, он связан с API?
что значит связан с апи, если валидатор работает с данными?
источник

L

Let me take you into the light in Angular - русскоговорящее сообщество
RA-TA-TATA
что значит связан с апи, если валидатор работает с данными?
Ты пишешь в форму емейл, как только дописал кидаеться запрос на сервер и проверяеться занят ли он
источник

L

Let me take you into the light in Angular - русскоговорящее сообщество
Либо с delay каким-то
источник

R

RA-TA-TATA in Angular - русскоговорящее сообщество
тогда да, связан
источник

L

Let me take you into the light in Angular - русскоговорящее сообщество
RA-TA-TATA
тогда да, связан
Ты пишешь сервис, в нём метод, который принимает данные с формы:
some.service.ts

class SomeService {

  checkOrValidate(data: ISomeData) {
   return this.http
           .get('url)
          .delay(500)
          .map(() => res).map(() => validate with data)

}

component:

fb.group({ field: [ '', [Validators .... ], [ this.validateSmth.bind(this)]

validateSmth(control: AbstractControl) { return this.someService.checkOrValidate(control.value) -> logic
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
Egor Gorbachev
Подскажите как через RxJS описать поток, который эмитит данные с произвольной задержкой, пример на async/await:

await sleep(3000);
console.log(1);
await sleep(2500);
console.log(2);
await sleep(300);
console.log(3)
Типа такого?

function randomDelay<T>(
 min: number, max: number
): MonoTypeOperatorFunction<T> {
 return concatMap(
   value => of(value).pipe(
     delay(getRandom(min, max))
   )
 );
}

source.pipe(
 randomDelay(100, 1000)
)


Будет эмитить значения с рандомной задержкой от 100 до 1000мс
источник

L

Let me take you into the light in Angular - русскоговорящее сообщество
Вертихвост キバ
Типа такого?

function randomDelay<T>(
 min: number, max: number
): MonoTypeOperatorFunction<T> {
 return concatMap(
   value => of(value).pipe(
     delay(getRandom(min, max))
   )
 );
}

source.pipe(
 randomDelay(100, 1000)
)


Будет эмитить значения с рандомной задержкой от 100 до 1000мс
Насколько я понял там чёткий порядок времени
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
Тогда убираем рандом, и все delay будут последовательные
источник

EG

Egor Gorbachev in Angular - русскоговорящее сообщество
Вертихвост キバ
Типа такого?

function randomDelay<T>(
 min: number, max: number
): MonoTypeOperatorFunction<T> {
 return concatMap(
   value => of(value).pipe(
     delay(getRandom(min, max))
   )
 );
}

source.pipe(
 randomDelay(100, 1000)
)


Будет эмитить значения с рандомной задержкой от 100 до 1000мс
Спасибо, хотелось бы указывать точную задержку. Вроде такого:
pipe(emit(1), delay(1000), emit(2), delay(200)) и т.д
источник

EG

Egor Gorbachev in Angular - русскоговорящее сообщество
Видимо самый простой вариант через setTimeout
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
function delaySync<T>(
 time: number
): MonoTypeOperatorFunction<T> {
 return concatMap(pipe(of, delay(time)));
}

source.pipe(
 delaySync(100),
 tap(() => console.log(1)),
 delaySync(1000),
 tap(() => console.log(2)),
)
источник