簡體   English   中英

如何返回布爾值並檢查該布爾值

[英]How to return boolean observable and check that boolean value

我想使用 observable 來同步運行我的代碼,我想在從服務器獲取圖標后返回一個真值,以便我可以使用它。 我該怎么做 ?

ngOnInit() {
  this.addIcons().subscribe(data=>{
    if(data===true)
      //do something use the data

  });
}

addIcons():Observable<boolean>{

  this.Service.getIcons().subscribe(icons => {

    return  return observableOf(true);   
  });

  return observableOf(false);   

}

您將使用RxJS 中ofswitchMap運算符。

您的addIcons方法變為:

import { of } from 'rxjs';
import { switchMap } from 'rxjs/operators'

ngOnInit() {
  this.addIcons().subscribe(data=>{
    if(data===true)
      //do something use the data

  });
}

addIcons():Observable<boolean>{
  return this.Service.getIcons().pipe(
    switchMap((response) =>{
      // do something with icons response
      // based on some condition return true or false
      return of(true)
    })
  )
}
addIcons():Observable<boolean>{
  const result = new Subject<boolean>();

  this.Service.getIcons().subscribe(icons => {

    result.next(true);
    result.complete();
  },
  error => {
    result.next(false);
    result.complete();
  });   

  return result.asObservable();
}

您的 addIcons() 函數始終返回可觀察的 false。 您首先訂閱 getIcons() 函數,然后返回 observableOf(false) ,然后才會發生訂閱。

我會做以下事情

private sub: Subscription;
ngOnInit() {
    this.sub = this.getIcons$()
        .subscribe(data => {
            if (data){
                //do something use the data
            }
    });
}

ngOnDestroy() {
    this.sub.unsubscribe();
}

getIcons$(): Observable<boolean> {
    return this.Service.getIcons()
        .pipe(
            map(icons => {
                return icons ? true : false
            })
        )
}

不要忘記取消訂閱 observable 訂閱,否則會出現內存泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM