#typescript #rxjs #angular-observable
#typescript #rxjs #angular-наблюдаемый
Вопрос:
//declare observable
somenums: Observable<number[]>
//instantiate the oberservale
somenums: new Observable<number[]>(somefunc)
Зачем мне объявлять наблюдаемый объект с определенным типом.
указывает ли наличие наблюдаемого в качестве типа number[], что observable вернет наблюдателям number[] ?
как данные могут передаваться в наблюдаемый объект во время создания экземпляра и после создания экземпляра?
и как наблюдатели будут обрабатывать поток в этом сценарии.
Комментарии:
1. » указывает ли наличие наблюдаемого в качестве номера типа [], что наблюдаемый вернет наблюдателям число []? » да
2. как бы вы вернули число [] в этом сценарии во время создания экземпляра и после создания экземпляра. @VLAZ
3. Невозможно создать значение во время инициализации. Сначала должна быть выполнена инициализация, а затем наблюдаемый объект может выдавать значения. Что касается того, как производить
number[]
, просто сделайте что-то вродеsubscriber.next([1, 2, 3])
.
Ответ №1:
Ввод наблюдаемых
Тип наблюдаемого указывает вам тип объекта, который передается next
функции обратного вызова наблюдателя. Кроме того, наблюдаемые объекты могут выдавать либо complete
событие, либо error
событие (никогда оба).
Вы вводите наблюдаемые объекты по той же причине, по которой вы вводите an Array
или возвращаемое значение a Function
. Чтобы ваша IDE, интерпретатор, компилятор и т. Д. Могли помочь вам убедиться, что ваша программа выполняет то, что вы хотите.
Использование наблюдаемых (basic)
// declare observable
somenums: Observable<number[]>
// instantiate Observable
// (from scratch)
somenums: new Observable<number[]>(observer => {
observer.next([1,2,3]);
observer.next([7,6,5]);
observer.next([4,4,4]);
observer.complete();
return {
unsubscribe: () => {/*do nothing*/}
}
});
// instantiate the same observable
// (from RxJS creation operator)
somenums: from([
[1,2,3],
[7,6,5],
[4,4,4]
]);
// subscribe to observable, print emissions to the console
somenums.subscribe(console.log);
// Append the value 4 to each array of numbers, then print to the console
somenums.pipe(
map(x => ([...x, 4]))
).subscribe(console.log);