在StorefrontAppModule构造函数中注入ActiveCartService:privatecartService:ActiveCartService,调用其API:constloading$=this.cartService.getLoading();loading$.subscribe((data)=>console.log('Jerrycartloading?',data));打印出来的日志:active-cart.service.d.ts只包含了方法的参数定义:如果要查看其实现代码,还是要查看fesm2015的Spartacus-core.js文件:getLoading():Observable{returnthis.cartSelector$.pipe(map((cartEntity)=>cartEntity.loading),distinctUntilChanged());}检查this.cartSelector$的实现://StreamwithactivecartentityprotectedcartSelector$=this.activeCartId$.pipe(switchMap((cartId)=>this.multiCartService.getCartEntity(cartId)));cartSelector$的赋值逻辑:从activeCartId$中获取cartId,调用multiCartService读取。MultiCartService仅通过选择器从商店中读取。ActiveCartId$分配逻辑://此流用于在API调用中引用购物车。protectedactiveCartId$=this.userIdService.getUserId().pipe(//我们要等待cartId的初始化,直到我们初始化了userId//当userId更改时,我们有take(1)不触发此流。take(1),switchMapTo(this.store),select(MultiCartSelectors.getActiveCartId),//我们还等到我们从localStorage初始化购物车。在此之前,商店中的cartId===nullfilter((cartId)=>cartId!==activeCartInitialState),map((cartId)=>{if(cartId===''){//当我们没有特定的购物车id->cartId===''时,我们回退到当前,因为这是你引用最新的方式用户购物车。returnOCC_CART_ID_CURRENT;}returncartId;}));在这个文件中添加一行打印语句:果然,我看到了这样的语句:为什么初始加载标志设置为真?通过调试代码,我们知道这个LoadCart继承了EntityLoadAction,所以它也继承了默认的load:true标志。那么什么时候又变假了呢?看了调用栈,没有看到任何斯巴达克斯相关的代码:我只知道一定是在LoadCartSuccess之后发生的。从map.js看到一个线索:这个值包含了购物车的业务数据cart:和loading:false这是我们的应用代码:从Cart选择器中取出CartEntity,调用map,映射loading字段:Cart数据结构:从这里也可以解释,一定是LoadCartSuccess触发的第二次loading。打印:此时购物车数据已返回,loading为假:更多Jerry原创文章在这里:《王子熙》: