2025-01-30 05:00:11

'操作符'中的' vs '

是可观察对象之间唯一的区别。和Observable.from arguments format?比如Function.prototype.call和Function.prototype.apply?

Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})

当前回答

当我想到与.call / .apply方法的类比时,我发现更容易记住它们的区别。

你可以这样想:

通常,单独传递的所有参数(用逗号分隔)也会按照传递的顺序单独发出。Of()只是逐个发出所有参数(就像.call方法将参数传递给被调用的函数一样) 从某种意义上说,From()类似于.apply,它可以接受一个值数组作为参数,并将数组元素转换为用逗号分隔的独立参数。

因此,如果您有一个数组,并希望每个元素分别发出,您可以使用from()或通过使用of()和扩展操作符(如of(…arr))来获得相同的行为。

这有点复杂(从也可以观察到),但通过这个类比,可能会更容易记住主要的区别。

其他回答

当我想到与.call / .apply方法的类比时,我发现更容易记住它们的区别。

你可以这样想:

通常,单独传递的所有参数(用逗号分隔)也会按照传递的顺序单独发出。Of()只是逐个发出所有参数(就像.call方法将参数传递给被调用的函数一样) 从某种意义上说,From()类似于.apply,它可以接受一个值数组作为参数,并将数组元素转换为用逗号分隔的独立参数。

因此,如果您有一个数组,并希望每个元素分别发出,您可以使用from()或通过使用of()和扩展操作符(如of(…arr))来获得相同的行为。

这有点复杂(从也可以观察到),但通过这个类比,可能会更容易记住主要的区别。

从操作员可以接受其中之一

承诺 可迭代的 数组 可观测的

From从可观察对象中发出每个单独的项,也可以进行转换。

Of操作符接收原始值并从可观察对象中发出该值。

import {from, Observable, of} from 'rxjs';

const ofObs = of([1,2,3]);
const fromObs = from([2,3,4]);

const basicObs = Observable.create(observer=>{
    observer.next(100);
    observer.next(200);
    observer.next(300);
})
const promise = new Promise((resolve,reject)=>{
    resolve(100);
})

const array = [1,2,3];
const iterbale  = "Dhana";

// const myObs = from(ofObs);//possible and can emit individual item value everytime 1, then ,2 , then 3
// const myObs = from(fromObs);//possbile and can emit individual item value everytime 1, then ,2 , then 3
// const myObs = from(basicObs);//possbile and can emit individual item value everytime 100, then ,200 , then 300
const myObs = from(promise);//possible can emit value 100
// const myObs = array(promise);//possible and can emit individual item value everytime 1, then ,2 , then 3
// const myObs = iterable(promise);//possible and can emit individual item value everytime D then h then a then n then a


myObs.subscribe(d=>console.log(d))



import {from, of} from 'rxjs';

const basicOf1 = of([1,2,3,4,5,6]) // emits entire array of events
const basicfrom1 = from([1,2,3,4,5,6]) //emits each event at a time

const basicOf2 = of(1,2,3,4,5,6) // emits each event at a time
// const basicfrom2 = from(1,2,3,4,5,6) //throws error
//Uncaught TypeError: number is not observable

const basicOf3 = of(...[1,2,3,4,5,6]) // emits each event at a time
const basicfrom3 = from(...[1,2,3,4,5,6]) //throws error
//Uncaught TypeError: number is not observable
basicOf3.subscribe(d=>console.log(d))

这里是codeen的链接

从数组、promise或iterable中创建可观察对象。只接受一个值。对于数组、可迭代对象和字符串,所有包含的值都将作为序列发出

const values = [1, 2, 3];
from(values); // 1 ... 2 ... 3

的:创建具有可变数量值的可观察对象,按顺序发出值,但数组为单个值

const values = [1, 2, 3];
of(values, 'hi', 4, 5); // [1, 2, 3] ... 'hi' ... 4 ... 5

一行区别:

       let fruits = ['orange','apple','banana']

from:从数组中逐个生成项。例如

    from(fruits).subscribe(console.log) // 'orange','apple','banana'

of:一次性释放整个数组。例如

 of(fruits).subscribe(console.log) //  ['orange','apple','banana']

注:of运算符可以表现为from运算符与展开运算符

 of(...fruits).subscribe(console.log) //  'orange','apple','banana'

的值会同时发出所有的值

From将逐一发出所有值

with展开运算符= from运算符