Как вернуть наблюдаемые значения, испускаемые внутренними наблюдаемыми? - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь вернуть наблюдаемое из того, что является ответом внутренней наблюдаемой.

FIDDLE

  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 ]

2 голосов
/ 01 июля 2019

Вместо подписки лучше использовать оператор map.

import { map } from 'rxjs/operators';

function Resolver() {
  ...
  return ob1.pipe(map(d=>{
    if(d == 'something') {
      return x * 10;
    } else {
      return x * 20;
    }
  }));
}
0 голосов
/ 01 июля 2019

Вы должны взглянуть на оператор 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;
    });
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...