【问题标题】:RxJS: How to delay execution of the ELSE in RxJS.Observable.if?RxJS:如何延迟 RxJS.Observable.if 中 ELSE 的执行?
【发布时间】:2018-04-19 20:35:37
【问题描述】:

我有一个可能存在也可能不存在的对象。我正在使用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 使用它。因此使用动作。

【问题讨论】:

    标签: rxjs redux-observable


    【解决方案1】:

    您的 then/else observable 创建没有包装在函数中,因此 else observable 设置代码在传递给 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 变量的使用,直到有东西尝试订阅 observable,这永远不会发生。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 2020-11-14
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      • 2016-12-17
      相关资源
      最近更新 更多