我有一個要回傳的操作,當單擊按鈕時,我需要進行 api 呼叫以洗掉所有專案,然后回傳另一個頁面。
所以在我的html中:
<a class="btn backbtn" (click)="goBack()" role="button">
Back
</a>
goBack(){
removeItems = this.removeAllItems(this.items)
if(removeItems) this.router.navigate(["/home"])
}
removeAllItems(items){
items.forEach((item) => {
let removeItemService = this.itemService.removeItem(item.id)
removeItemService.pipe(untilDestroyed(this)).subscribe(
(data) => {console.log("data", data)}
)
if (products.length === 0) return true
})
}
在我的服務中:
removeAllItems(itemId): Observable<any>{
let url = ..... itemId
return this.http.delete(url)
}
現在的問題是它沒有進入
if(removeItems) this.router.navigate(["/home"])
所以專案不會被洗掉
uj5u.com熱心網友回復:
元素的洗掉是異步發生的,而您的goBack
函式似乎是同步的。我會從removeAllItems
函式回傳一個 Observable 并等待它完成,然后再繼續:
removeAllItems(items: any[]): Observable<boolean> {
return forkJoin(items.map((item) => this.removeItem(item.id))).pipe(
map((res) => res.length == items.length)
);
}
removeItem(itemId): Observable<any> {
let url = /* ..... */ itemId;
return this.http.delete(url);
}
goBack() {
this.removeAllItems(this.items)
.pipe(filter((removedAllItems) => removedAllItems))
.subscribe(() => this.router.navigate(['/home']));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/508317.html
標籤:javascript 有角度的
上一篇:過濾物件javascript陣列中的資料時獲取資料和索引
下一篇:遍歷嵌套物件陣列以獲取ID和名稱