我想使用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);
}
答案 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)
您的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}.") ?>' )
})
别忘了取消订阅可观察的订阅,否则会出现内存泄漏。