提供了一种强大且简化的方式来处理状态(换句话说,加载和缓存),并对后端系统执行操作。这类似于ReactQuery和SWR等库在单页应用程序中处理来自API的状态问题的方式。前端应用状态很大一部分来自后端。通常用于状态管理的Redux架构在创建时并没有考虑到这种类型的状态,并且需要大量的样板文件来支持它。不同类型的状态需要不同的解决方案,命令和查询旨在处理Spartacus中API的状态。在许多情况下,命令和查询将取代默认的Spartacus库的NgRx,并使大多数实现更简单,具有更好和更一致的错误处理,同时还利用Spartacus事件框架。什么是命令命令表示可以改变系统状态的操作,通常是通过对后端进行REST调用。命令可以返回结果,并且可以在遵守执行策略的情况下执行。每个命令执行都会返回一个可观察对象,该对象会发出(带有可选的成功结果),然后在命令完成时完成,或者如果命令执行导致错误则抛出错误。订阅resultobservable并不能决定命令的执行,所以它是可选的。,命令定义通过存储CommandService.create工厂方法调用的结果,可以将命令定义为类的一个属性。命令具有以下参数:一个用于调度命令的函数(通常是对连接器的调用)一个选项对象(通常用于指定策略)下面是一个示例:protectedupdateCommand:Command<{details:User}>=this.command.create((payload)=>this.userIdService.takeUserId(true).pipe(switchMap((uid)=>this.userProfileConnector.update(uid,payload.details)),{strategy:CommandStrategy.Queue,});并行执行所有命令。Queue将命令排队并按顺序执行它们(这是默认策略)。CancelPrevious开始一个新的命令执行,如果还没有完成则取消之前的执行(之??前执行的结果流将完成而不发出)。ErrorPrevious开始执行新的命令,如果前一个命令尚未完成则引发错误(前一次执行的结果流将引发错误)。在Facade服务中公开命令命令被设计为作为对可以在命令类上执行并返回可观察结果的方法的调用来公开。如前所述,调用可以简单地调用方法来执行命令。订阅结果是可选的。这是一个例子:update(details:User):Observable
