Angular 如何不从ngrx存储获取空值

Angular 如何不从ngrx存储获取空值,angular,ngrx,Angular,Ngrx,我在angular 7中使用nrgx/store软件包 这就是我从商店得到这个CurrentAdaAccount的方式。问题是我有多个组件的这段代码。现在这段代码是错误的,因为将这个值放入存储的其他东西不会发生那么快,所以下面这段代码在第一个1ms返回null;10毫秒后,返回正确的值。所以为了让这一切顺利,我必须加上一句:如果!当前帐户返回;在订阅中 this.store.select(fromRoot.currentAdAccount).subscribe(currentAdAccount

我在angular 7中使用nrgx/store软件包

这就是我从商店得到这个CurrentAdaAccount的方式。问题是我有多个组件的这段代码。现在这段代码是错误的,因为将这个值放入存储的其他东西不会发生那么快,所以下面这段代码在第一个1ms返回null;10毫秒后,返回正确的值。所以为了让这一切顺利,我必须加上一句:如果!当前帐户返回;在订阅中

this.store.select(fromRoot.currentAdAccount).subscribe(currentAdAccount => {
      console.log("nice1", currentAdAccount);
     this.currentAdAccountId = currentAdAccount.value;
    })
因此,在任何地方,编写if语句并检查值不为null都是不好的

问题1我如何以一种非常简单的方式只获取非空的值,这样它就不会被复制


问题2你如何处理这种情况?

你可以这样写

this.store.pipeselectfromRoot.CurrentAdaAccount,跳过1 为了使这段代码正常工作,您必须在reducer中设置CurrentAdaAccount的初始状态,如下所示

导出常量初始状态={ CurrentAdaAccount:空 } 并在视图中使用异步管道

你有这个问题吗

下面这段代码在前1ms返回null;然后 10毫秒后,它返回正确的值

因为状态必须在您第一次加载页面时初始化初始值,之后,reducer将根据您的操作从存储库获取新状态


如果您有任何问题,请告诉我

您可以使用.pipefilterval=>val!==null.SubscribeCurrentDaccount=>。。。。NgRx文件将a描述为可管道化运营商:

import { select } from '@ngrx/store';
import { pipe } from 'rxjs';
import { filter } from 'rxjs/operators';

export const selectExistingCurrentAdAccount = pipe(
  select(fromRoot.currentAdAccount),
  filter(val => val !== null)
);
然后像这样使用它:

this.store.pipe(selectExistingCurrentAdAccount).subscribe(currentAdAccount => ...)

这意味着在订阅存储值时,我仍然需要编写if语句。这是我的问题,如何避免在订阅中使用if语句。请仔细阅读我的回答。我使用skip,这样我就可以在第一时间跳过null值。这会奏效的。您确定这是最佳实践,并且第一个值不可能不为null吗?在我看来,这将完美地工作。我还想问你,这是否是最佳实践。我们在当前项目中确实喜欢这样做