RxJS: Как отложить выполнение ELSE в RxJS.Observable.if?

У меня есть объект, который может или не может существовать. я использую Observable.if определить, какое действие нужно сделать, исходя из его существования.

Тем не менее else часть Observable.if, кажется, работает, даже когда объект не определен. Я получаю эту ошибку: TypeError: Cannot read property 'genesisHash' of undefined

  console.log("jjjjjjjjjjjjjjjj: ", t); // prints out jjjjjjjjjjjjjjjj:  undefined
  return Observable.if(
    () => !t,
    Observable.of(nodeActions.requestGenesisHashes()),
    Observable.of(
      nodeActions.treasureHunt({ 
        genesisHash: t.genesisHash // error occurs here
      })
    )
  );

Как бы я отложил вызов nodeActions.treasureHunt, чтобы он не пытался посмотреть на genesisHash атрибут на t?

Я использую это через наблюдаемую редукцией между прочим. Следовательно, используя действия.

1 ответ

Решение

Ваше наблюдаемое в то время / еще создание не обернуто в функцию, поэтому остальной наблюдаемый установочный код запускается при передаче в Observable.of(...) функция. Вам, вероятно, нужно просто использовать обычную логику if / else:

const actions = !t ? nodeActions.requestGenesisHashes() :
  nodeActions.treasureHunt({ genesisHash: t.genesisHash });

return Observable.of(actions);

Если вы действительно хотите использовать этот метод, вы можете просто создать Observable вручную:

return Observable.if(
  () => !t,
  Observable.of(nodeActions.requestGenesisHashes()),
  Observable.create(obs => {
    obs.next(nodeActions.treasureHunt({ genesisHash: t.genesisHash }));
    obs.complete();
  });
);

Это должно задержать использование t переменная, пока что-то не попытается подписаться на наблюдаемое, что никогда не произойдет.

Другие вопросы по тегам