動機:我正在保存期間對書名進行驗證-如果資料庫中已經有同名的書,則應拋出驗證錯誤訊息。如果用戶輸入的書名存在任何書籍,我的服務中有一個方法回傳書籍物件。
呼叫此服務方法后,我訂閱它,將結果分配給 bool 變數并檢查 if 陳述句中的 bool 變數。由于使用 subscribe/observable,if 陳述句首先執行,然后訂閱者被呼叫,并且不回傳正確的值并且不觸發驗證。
我哪里錯了?提前致謝。
下面是我的代碼:
export class AddBooksComponent implements OnInit{
bookName = "";
isError = false;
errorMessage="";
isPresent:boolean = false;
constructor(public bsModalRef: BsModalRef,private booksService: BooksService) { }
ngOnInit(): void { }
saveBooks() {
if(this.checkBookExistenance()) {
this.isError = true
this.errorMessage="The provided book name is already exists."
} else {
this.bsModalRef.hide()
}
}
checkPreferenceExistenance():boolean {
this.booksService.getBookByName(bookNameName:trim(this.bookName))
.pipe(first())
.subscribe((data) => {
// if the response has data then the book is present
if(data.length) {
isPresent= true;
}
else{
isPresent= false;
}
});
return isPresent;
}
}
uj5u.com熱心網友回復:
this.booksService.getBookByName()是異步的,它需要一些時間來執行,同時代碼會繼續執行。
checkBookExistenance應該回傳一個可觀察的:
checkPreferenceExistenance(): Observable<boolean> {
return this.booksService.getBookByName(bookNameName: trim(this.bookName)).pipe(
first(),
map(data => {
if (data.length){
return true;
}else{
return false;
}
})
// or shortform without if/else: map(data => data.length)
);
}
接著:
this.checkPreferenceExistenance().subscribe(
exist => {
if (exist) {
this.isError = true
this.errorMessage = "The provided book name is already exists."
} else {
this.bsModalRef.hide()
}
}
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/414475.html
標籤:
