Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Promise将值预先发送到switchMap_Javascript_Typescript_Rxjs_Reactive Programming_Reactive - Fatal编程技术网

Javascript 使用Promise将值预先发送到switchMap

Javascript 使用Promise将值预先发送到switchMap,javascript,typescript,rxjs,reactive-programming,reactive,Javascript,Typescript,Rxjs,Reactive Programming,Reactive,每次此.selectedLanguage$发出一个新值时,我需要发出一个异步计算的值。 我提出的代码如下: public readonly languageCategories$ = this.selectedLanguage$.pipe( switchMap(x => this._matchService.getCategoriesAsync(x)), shareReplay()); 我使用了switchMap,因为如果selectedLanguage在获取类别时发生更改,则应

每次
此.selectedLanguage$
发出一个新值时,我需要发出一个异步计算的值。 我提出的代码如下:

public readonly languageCategories$ = this.selectedLanguage$.pipe(
  switchMap(x => this._matchService.getCategoriesAsync(x)),
  shareReplay());
我使用了
switchMap
,因为如果
selectedLanguage
在获取类别时发生更改,则应放弃异步调用并启动新的调用

问题是,每次异步方法开始等待时,我都希望
languageCategories
发出
null
(这意味着正在计算类别,
[]
会产生误导)。
我怎样才能做到这一点


提前谢谢你

以下是一种方法:

languageCategories$=此.selectedLanguage$.pipe(
开关图(
x=>合并(
of(null),//立即发出'null',开始加载
此._matchService.getCategoriesAsync(x),
)
),
//shareReplay()?对此不确定
);
我评论了
shareReplay
,因为我不确定它是否应该在那里,因为它还将缓存
null
值(异步操作开始加载时发出)。为了避免这种情况,您可以尝试以下方法:

languageCategories$=此.selectedLanguage$.pipe(
开关图(
x=>合并(
of(null),
此._matchService.getCategoriesAsync(x),
)
),
点击(v=>v==null&&dosDeeffect()),
过滤器(v=>!!v),
shareReplay()
);
另外,请注意,您可以向
shareReplay
操作符添加一些配置:
shareReplay({bufferSize,windowTime,scheduler,refCount})
,其中

  • bufferSize
    -应该缓存多少个值;如果超过该限制,将处理最旧的存储值
  • windowTime
    -值应存储多长时间
  • 计划程序
    -指定自定义计划程序
  • refCount
    -如果没有活动订阅者,则应销毁
    ReplaySubject
    (在后台使用)

你想做什么?发出
null
的目的是什么?您是否只是想知道何时计算新值?确切地说,
null
会在计算新值时使以前的值无效,而不应该是
[]
,因为它会有错误的含义,因为它会产生副作用(这是必需的),可以用作加载指示器