RxJS:如何延迟 RxJS.Observable.if 中 ELSE 的执行?

RxJS: How to delay execution of the ELSE in RxJS.Observable.if?

我有一个可能存在也可能不存在的对象。我正在使用 Observable.if 来根据它的存在来确定要执行的操作。

然而,即使对象未定义,Observable.if 的 else 部分似乎也是 运行。我收到此错误: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 的调用,使其不会尝试查看 t 上的 genesisHash 属性?

顺便说一句,我通过 redux-observable 使用它。因此使用动作。

您的 then/else observable 创建未包含在函数中,因此传递给 Observable.of(...) 函数时,else observable 设置代码为 运行。您可能只需要使用常规 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 变量的使用,直到有人尝试订阅可观察对象,而这永远不会发生。