जवाबों:
काफी नहीं। किसी सरणी को पास करते समय 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.from ([]) की सदस्यता लेते हैं तो आपको कोई मूल्य नहीं मिलेगा।
यह महत्वपूर्ण है जब आप स्विचमैप के साथ लगातार ऑपरेशन करते हैं।
Ex: नीचे के उदाहरण में, मैं एक नौकरी और फिर साइटों को सहेज रहा हूं, और फिर एक धारा के रूप में टिप्पणी करता हूं।
.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())
....
अगर बचाने के लिए कोई साइट नहीं है, यानी; add.ite अनुभाग में data.length = 0, उपरोक्त कोड Observable.of ([]) वापस आ रहा है और फिर टिप्पणियों को सहेजने के लिए जाता है। लेकिन अगर आप इसे Observable.from ([]) से बदल देते हैं, तो सफल होने के तरीकों को नहीं बुलाया जाएगा।
एक पंक्ति अंतर:
let fruits = ['orange','apple','banana']
से : सरणी के एक एक करके आइटम से बाहर निकलें। उदाहरण के लिए
from(fruits).subscribe(console.log) // 'orange','apple','banana'
of : एक बार में पूरे ऐरे से बाहर निकलें। उदाहरण के लिए
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