我想等待一个可观察到的对象有一个定义值,然后再继续。
我尝试了以下操作,但它不起作用,即使myObservable$
是用值实例化的
await lastValueFrom(this.myObservable$.pipe(filter((event) => (event == 'something' ? true : false))))
上下文
在angular中,在iFrame中加载应用程序时,我需要一个可能存在于本地或由父级设置的令牌。
如果这是由父级设置的,我希望我的警卫等待,直到令牌有值为止。
变通办法
我只为此目的创建了一个可观测值,所以我可以使用await lastValueFrom(this.myObservable$)
,这是有效的,但我只是想知道是否可以等待特定的值。
为了让lastValueFrom
发射任何东西,它的可观测源必须完成(否则,就没有"最后一个"值(。
您可以在您的过滤条件后使用take(1)
强制完成:
await lastValueFrom(this.myObservable$.pipe(
filter(event => event === 'something'),
take(1)
));
当然,使用takeWhile。
await lastValueFrom(this.myObservable$.pipe(takeWhile(val => val != 5, true)))