我试图更好地理解概念或 RxJS,这是一个简单的例子,我不确定我是否理解正确:
from([1,2,3,]).pipe(
map((data)=>{
console.log(data,'map');
return data
})
)
.subscribe(data=>console.log(data, 'from subscribe'))
/*
1 map
1 from subscribe
2 map
2 from subscribe
3 map
3 from subscribe
*/
我认为会发生以下情况:
subscribe
时,首先 map
订阅 from
Observable。from
发出的每个值都会被控制台记录并作为单独的Observable从map
发出。所以,在这种情况下,我们将有 3 个 Observables。.subscribe
订阅来自 map
的每个 Observable(解析为 1 的 Observable,解析为 2 的另一个 Observable,...),我们看到另一个日志。查看文档后,我认为我目前对事物运作方式的理解出现了问题。
如果有人可以确认或更正我在问题中描述的逻辑,我将不胜感激。
from
-> 将数组转换为可观察值流,并逐一发出。map
-> 访问可观察值的值,如果需要,您可以选择转换数据,输入参数不是可观察值,输出值也不是可观察值。subscribe
-> 对于每个发出的值,都会调用订阅下一个块(传递的函数。订阅有三个部分,订阅有三个参数。
next
-> 当 observable 发出一个值时调用,将在每次发出时继续调用,直到 observable 完成error
-> 当可观察流出现错误时调用,可能是无意的(编码错误)或手动错误 throw new Error('failed')
complete
-> 一旦可观察流完成就会被调用。在您的示例中,下一个块被调用三次(在您的例子中是console.log),最后调用完整的块。为了更好地理解它,这里有一个突出显示相同内容的工作示例!
import './style.css';
import { rx, of, map, from } from 'rxjs';
from([1, 2, 3])
.pipe(
map((data) => {
console.log(data, 'map');
return data;
})
)
.subscribe({
next: (data: any) => {
console.log(data, 'from subscribe next');
},
error: (data: any) => {
console.log(data, 'from subscribe error');
},
complete: () => {
console.log('from subscribe complete');
},
});