Observable.create() 函数的参数是否必须明确定义观察者?

我从这里遇到了这段代码:https : //medium.com/@mohandere/rxjs-5-in-5-minutes-1c3b4ed0d8cc


function multiplyByTen(input) {

  var output = Rx.Observable.create(function subscribe(observer) {

    input.subscribe({

      next: (v) => observer.next(10 * v),

      error: (err) => observer.error(err),

      complete: () => observer.complete()

    });

  });

  return output;

}


var input = Rx.Observable.from([1, 2, 3, 4]);

var output = multiplyByTen(input);

output.subscribe(x => console.log(x));

// Result In:

// 10 

// 20 

// 30 

// 40

我只是看不到 multiplyByTen 函数中 subscribe 函数的“观察者”参数来自哪里?它是否必须明确定义,还是只是一些“默认”对象传递给 create 函数,以防它之前未定义?为什么在函数内部调用函数 subscribe(observer)?它会覆盖默认的 .subscribe() 函数还是也可以是匿名函数?


www说
浏览 171回答 1
1回答

汪汪一只猫

它只是一个 RxJS 构造,允许您将新值分派给订阅者函数。基本上,这就是 RxJS 设计库的方式。这允许您控制新值的分派。使用的一个例子是当你有一些异步操作并且你想在它已经解决/完成时向订阅者发送一个新值。您可以在此处阅读有关其工作原理的更多信息:https : //www.learnrxjs.io/operators/creation/create.html另外,在 JsBin 中查看这个简单的同步示例(取自上面的文档链接)/*  Create an observable that emits 'Hello' and 'World' on    subscription.*/const hello = Rx.Observable.create(function(observer) {  observer.next('Hello');  observer.next('World');});const subscribe = hello.subscribe(val => console.log(val));// prints.. the follwoing:// Hello// World我上面提到的异步情况如下所示:(来自官方 RxJS jsBin 示例 - https://jsbin.com/lodilohate/1/edit?js,console):// RxJS v6+import { Observable } from 'rxjs';/*  Increment value every 1s, emit even numbers.*/const evenNumbers = Observable.create(function(observer) {  let value = 0;  const interval = setInterval(() => {    if (value % 2 === 0) {      observer.next(value);    }    value++;  }, 1000);  return () => clearInterval(interval);});//output: 0...2...4...6...8const subscribe = evenNumbers.subscribe(val => console.log(val));//unsubscribe after 10 secondssetTimeout(() => {  subscribe.unsubscribe();}, 10000);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript