如何返回内部可观测值发出的可观测值?

时间:2019-07-01 12:52:21

标签: javascript angular typescript rxjs

无论内部可观察的响应是什么,我都试图返回可观察的。

https://support.loopia.se/wiki/python/

  function Resolver() {
var x="5";

 var ob1= Rx.Observable.of(1).delay(2000);

 ob1.subscribe(d=>{
    if(d=='something'){
     x=x*10;
    }
    else{
    x=x*20;
    }
     console.log(x);
  });

 return Rx.Observable.of(
  x
  );
}
console.clear();
var mydata= Resolver().subscribe(data => {
 console.log(data)
});

上面的代码先返回5,然后返回100。我只想返回100。

2 个答案:

答案 0 :(得分:2)

您应该使用map运算符,而不要订阅。

import { map } from 'rxjs/operators';

function Resolver() {
  ...
  return ob1.pipe(map(d=>{
    if(d == 'something') {
      return x * 10;
    } else {
      return x * 20;
    }
  }));
}

答案 1 :(得分:0)

您应该看一下map运算符,因为我看不到您需要一个内部可观察的对象。如果是内部可观测值,则可以使用switchMap运算符,这会将内部可观测结果映射到外部可观测值。例如:

function Resolver() {
  var x=5;

  return Rx.Observable.of(1).delay(2000).pipe(
    map(data => {
      if(d=='something'){
        x=x*10;
      }
      else{
        x=x*20;
      }
      return x;
    });
  );
}