为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

www说 2022-01-07 10:16:02
我从这里遇到了这段代码:https : //medium.com/@mohandere/rxjs-5-in-5-minutes-1c3b4ed0d8ccfunction 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() 函数还是也可以是匿名函数?
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

它只是一个 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...8

const subscribe = evenNumbers.subscribe(val => console.log(val));

//unsubscribe after 10 seconds

setTimeout(() => {

  subscribe.unsubscribe();

}, 10000);


查看完整回答
反对 回复 2022-01-07
  • 1 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号