如何返回可观察的布尔值并检查布尔值

时间:2020-03-07 09:44:42

标签: javascript angular subscribe

我想使用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);   

}

3 个答案:

答案 0 :(得分:0)

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();
}

答案 1 :(得分:0)

您将使用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)
    })
  )
}

答案 2 :(得分:0)

您的addIcons()函数始终返回可观察到的false。 您首先订阅getIcons()函数,然后返回observableOf(false),然后才进行订阅。

我将执行以下操作

$.validator.messages = $.extend({}, $.validator.messages, {
        required: '<?= __("This field is required.") ?>',
        remote: '<?= __("Please fix this field.") ?>',
        email: '<?= __("Please enter a valid email address.") ?>',
        url: '<?= __("Please enter a valid URL.") ?>',
        date: '<?= __("Please enter a valid date.") ?>',
        dateISO: '<?= __("Please enter a valid date (ISO).") ?>',
        number: '<?= __("Please enter a valid number.") ?>',
        digits: '<?= __("Please enter only digits.") ?>',
        equalTo: '<?= __("Please enter the same value again.") ?>',
        maxlength: $.validator.format( '<?= __("Please enter no more than {0} characters.") ?>' ),
        minlength: $.validator.format( '<?= __("Please enter at least {0} characters.") ?>' ),
        rangelength: $.validator.format( '<?= __("Please enter a value between {0} and {1} characters long.") ?>' ),
        range: $.validator.format( '<?= __("Please enter a value between {0} and {1}.") ?>' ),
        max: $.validator.format( '<?= __("Please enter a value less than or equal to {0}.") ?>' ),
        min: $.validator.format( '<?= __("Please enter a value greater than or equal to {0}.") ?>' ),
        step: $.validator.format( '<?= __("Please enter a multiple of {0}.") ?>' )
    })

别忘了取消订阅可观察的订阅,否则会出现内存泄漏。