node.js - 如何在 behaviorSubject 上使用 shift?
问题描述
我有一个带有 BehaviorSubject 的课程:
export class WordsService {
private words = new BehaviorSubject<WordType[]>([]);
它被订阅了:
init() {
this.databaseService.fetchWords().subscribe(
(listaWords: WordType[]) => {
this.words.next(listaWords);
},
errors => console.error('err'),
() => console.log('suceed')
)
}
当我重构这段代码时:
private fetchWord(): void{
this.word = this.wordService.getWords().shift();
}
我正在尝试使用 .shift 获取变量 word 以获取数据,以便它可以一次从 observable 中获取一个元素,以及何时完成所有元素的获取。
解决方案
看起来您正在尝试将结果从 aWordType[]
转换为 single WordType
。
您可以通过应用这样的map()
运算符来做到这一点:
init(){
this.databaseService.fetchWords().pipe(
map(words => words.shift())
)
.subscribe(
(listaWords: WordType[]) => {
this.words.next(listaWords);
},
errors => console.error('err'),
() => console.log('suceed')
)
}
但是,您实际上并不需要 BehaviorSubject 来执行此操作,您可以直接从服务调用中简单地声明您的 observable:
public word: Observable<WordType> = this.databaseService.fetchWords().pipe(
map(words => words.shift()),
catchError(error => console.log(error))
);
现在,word
observable 只会发出你感兴趣的值。
这使您可以使用async
模板中的管道来管理订阅,而无需在控制器中自己进行。
推荐阅读
- php - 在php中用单引号连接变量
- java - 在 Perfecto 中找到具有另一个 Web 元素的 Web 元素
- flutter - 何时在 BlocBuilder() 中提供一个块?
- java - 使用 ResultTransformer 和投影的 Hibernate DetachedCriteria 未检索到实体列表
- github - 将所有存储库版本从 github 转换/迁移到 mercurial
- jasper-reports - jasper 报告没有为命名空间注册任何部分组件包
- c - 使用适当的包装函数从 sk_buff 获取 pid
- php - PrestaShop - 升级后无法登录后台 (1.7.2.0 -> 1.7.7.4)
- dictionary - 检查一个地图是否是另一个地图的子集
- react-native - React Native:所有标签栏图标均未显示