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
переменная, пока что-то не попытается подписаться на наблюдаемое, что никогда не произойдет.