Відповіді:
Не зовсім. При передачі масиву до Observable.from
, єдина різниця між ним і Observable.of
спосіб передачі аргументів.
Однак Observable.from
прийме аргумент, який є
об'єкт, що підписується, Обіцянка, Спосіб, що спостерігається, Масив, Ітерабельний або масив, подібний до об'єкта, який потрібно перетворити
Немає подібної поведінки для Observable.of
- яка завжди приймає лише значення та не здійснює перетворення.
Важливо відзначити різницю між of
та from
при передачі структури, схожої на масив (включаючи рядки):
Observable.of([1, 2, 3]).subscribe(x => console.log(x));
видав би відразу весь масив.
З іншої сторони,
Observable.from([1, 2, 3]).subscribe(x => console.log(x));
друкує елементи 1 на 1.
Для рядків поведінка однакова, але на рівні символів.
Ще один цікавий факт - Observable.of ([]) буде порожнім масивом, коли ви підписуєтесь на нього. Де, як підписуючись на Observable.from ([]), ви не отримаєте жодного значення.
Це важливо, коли ви робите послідовну операцію з комутацією.
Наприклад: У наведеному нижче прикладі я зберігаю роботу, а потім веб-сайти, а потім коментую як потік.
.do((data) => {
this.jobService.save$.next(this.job.id);
})
.switchMap(() => this.jobService.addSites(this.job.id, this.sites)
.flatMap((data) => {
if (data.length > 0) {
// get observables for saving
return Observable.forkJoin(jobSiteObservables);
} else {
**return Observable.of([]);**
}
})).do((result) => {
// ..
})
.switchMap(() => this.saveComments())
....
якщо немає сайту для збереження, тобто; data.length = 0 в розділі addSite, наведений вище код повертає Observable.of ([]) і переходить до збереження коментарів. Але якщо замінити його на Observable.from ([]), наступні методи не будуть викликані.
Різниця в одному рядку:
let fruits = ['orange','apple','banana']
від : Випромінюйте елементи по одному з масиву. Наприклад
from(fruits).subscribe(console.log) // 'orange','apple','banana'
з : Випромініть одразу весь масив. Наприклад
of(fruits).subscribe(console.log) // ['orange','apple','banana']
Примітка: від оператора може вести себе , як від оператора з оператором спреда
of(...fruits).subscribe(console.log) // 'orange','apple','banana'
https://stackblitz.com/edit/typescript-sckwsw?file=index.ts&devtoolsheight=100
from
: Створення спостережуваних із масиву, обіцянок чи ітерабелів. Приймає лише одне значення. Для масивів, ітерабелів та рядків всі містяться значення викидатимуться як послідовність
const values = [1, 2, 3];
from(values); // 1 ... 2 ... 3
of
: Створення спостережуваних із змінними величинами значень, випромінювання значень послідовно, але масиви як єдине значення
const values = [1, 2, 3];
of(values, 'hi', 4, 5); // [1, 2, 3] ... 'hi' ... 4 ... 5