Angular RXJS-Observable.do不工作
我试图返回一个带有do语句的可观测值。 由于某些原因,没有调用do station。 任何帮助都将被告知: 公共addTarget(视频:视频文件,语言?:语言):可观察{ 如果(!this.isTargetCollectionDeclared(视频)){ video.metadata=video.metadata | |{}; video.metadata.to=[]; } 让wasLanguageProvided=language!=null; 如果(提供了语言){ video.metadata.to.push(语言); (语言)的可观察的返回; } 返回此。\u从AvailableLanguages(视频)获取默认值 .do(languageOrNull=>{ //她没有收到密码 if(languageOrNull!=null){ video.metadata.to.push(languageOrNull) } })Angular RXJS-Observable.do不工作,angular,rxjs,rxjs5,Angular,Rxjs,Rxjs5,我试图返回一个带有do语句的可观测值。 由于某些原因,没有调用do station。 任何帮助都将被告知: 公共addTarget(视频:视频文件,语言?:语言):可观察{ 如果(!this.isTargetCollectionDeclared(视频)){ video.metadata=video.metadata | |{}; video.metadata.to=[]; } 让wasLanguageProvided=language!=null; 如果(提供了语言){ video.metad
}与函数一样,可观察对象是惰性的。除非您订阅它们,否则它们不会运行,这与调用它们之前函数不会执行的方式类似
调用observable后,传递给
.do
的回调将立即执行,这只能在您订阅了observable之后发生。在.do()中修改输入参数video
)
仅在异步内部\u GetDefaultFromAviableLanguages
函数发出值后才在函数内部创建的运算符非常难闻
这很可能会导致难以调试与视频对象上存在的语言或不在预期时刻有关的竞争条件。我建议您重构此文件,使其更加纯净,并返回更新的视频文件:
函数enrichVideoWithLanguage(视频:视频文件,语言?:语言):可观察{
//确保元数据对象处于预期状态
如果(!this.isTargetCollectionDeclared(视频)){
video.metadata=video.metadata | |{};
video.metadata.to=[];
}
可观察的返回(视频)
.合并地图(
(视频)=>{
国际单项体育联合会(语文){
可观察的返回(语言)
.toArray();
}
返回此。\u从AvailableLanguages(视频)获取默认值
.filter(lang=>lang!=null)
.toArray()
},
(视频,语言:语言[])=>{
//我们习惯于只修改视频对象一次
languages.forEach(lang=>video.metadata.to.push(language));
返回视频;
}
);
}
这仍然有点难闻,因为原始输入视频文件将在该函数中被修改,但至少可以帮助您确保由
enrichVideoWithLanguage
发出的视频文件在发出后将包含您期望的语言值。您是否订阅可观察的?如何调用addTarget
?addTarget().subscribe()此.videoLanguagesService.addTarget(video).subscribe(addedLangaugeOrNull=>{if(addedLangaugeOrNull==null){警报(“新语言即将推出”);}}我的错误。它是从另一个地方从视图中调用的。非常感谢你的帮助,我犯了个错误。它是从另一个地方从视图中调用的。多谢各位much@user3554268那么这个答案如何解决你的问题呢?如果是你自己的打字错误,你应该删除这个问题。如果我不需要可观察的结果呢。我可以让它在没有子脚本的情况下调用吗?@echonax我不知道do是惰性加载的。这不是打字错误。我原以为无需订阅就可以调用它。@user3554268但你说你是在评论部分订阅的。