我試圖找出等待多個請求并在完成后做某事的最佳方法是什么,請記住,兩個請求同時請求午餐,他們不應該互相等待。
// table filling
public SUB_getActSearch: Subscription;
// table filling 2
public SUB_getDeclarationSearch: Subscription;
public fillTable(): void {
const searchOBJ = {
CreateDateFrom: this.currentDate,
CreateDateTo: this.currentDate,
ActNumber: this.ActNumber == undefined ? '' : this.ActNumber,
vinCode: this.vinCode == undefined ? '' : this.vinCode,
GovNumber: this.GovNumber == undefined ? '' : this.GovNumber,
IsFromDashboard: true
};
const searchOBJ2 = {
ActNumber: this.ActNumber == undefined ? '' : this.ActNumber,
vinCode: this.vinCode == undefined ? '' : this.vinCode,
GovNumber: this.GovNumber == undefined ? '' : this.GovNumber,
};
if ((this.ActNumber && this.ActNumber != undefined && this.ActNumber != null) || (this.vinCode && this.vinCode != undefined && this.vinCode != null) || (this.GovNumber && this.GovNumber != undefined && this.GovNumber != null)) {
this.SUB_getActSearch = this.searchService.getActSearch({ ...searchOBJ2, PageSize: this.pageSize, PageNumber: this.currentPage }).subscribe((res) => {
this.Act_Data = [];
let headerPagin = JSON.parse(res.headers.get('X-Pagination'));
this.elementsLength = headerPagin.totalCount;
this.currentPage = headerPagin.currentPage;
this.pageSize = headerPagin.pageSize;
res.body.map((param) => {
this.Act_Data.push(param);
});
this.ActDataSource = new MatTableDataSource<Element>(this.Act_Data);
// console.log('Your form data : ', this.ActDataSource);
});
} else {
this.SUB_getActSearch = this.searchService.getActSearch({ ...searchOBJ, PageSize: this.pageSize, PageNumber: this.currentPage }).subscribe((res) => {
this.Act_Data = [];
let headerPagin = JSON.parse(res.headers.get('X-Pagination'));
this.elementsLength = headerPagin.totalCount;
this.currentPage = headerPagin.currentPage;
this.pageSize = headerPagin.pageSize;
res.body.map((param) => {
this.Act_Data.push(param);
});
this.ActDataSource = new MatTableDataSource<Element>(this.Act_Data);
// console.log('Your form data : ', this.ActDataSource);
});
}
}
public fillTable2(): void {
const searchOBJ = {
DeclarationCreateDateFrom: this.currentDate.substring(0, 10),
DeclarationCreateDateTo: this.currentDate,
DeclarationNumber: this.ActNumber == undefined ? '' : this.ActNumber,
VinCode: this.vinCode == undefined ? '' : this.vinCode,
TransitNumber: this.GovNumber == undefined ? '' : this.GovNumber,
};
const searchOBJ2 = {
DeclarationNumber: this.ActNumber == undefined ? '' : this.ActNumber,
VinCode: this.vinCode == undefined ? '' : this.vinCode,
TransitNumber: this.GovNumber == undefined ? '' : this.GovNumber,
};
if ((this.ActNumber && this.ActNumber != undefined && this.ActNumber != null) || (this.vinCode && this.vinCode != undefined && this.vinCode != null) || (this.GovNumber && this.GovNumber != undefined && this.GovNumber != null)) {
this.SUB_getDeclarationSearch = this.declarationsService.getDeclarations({ ...searchOBJ, IsFromDashboard: true, PageSize: this.pageSizeDecl, PageNumber: this.currentPageDecl }).subscribe((res) => {
this.Declaration_Data = [];
let headerPaginDecl = JSON.parse(res.headers.get('X-Pagination'));
this.elementsLengthDecl = headerPaginDecl.totalCount;
this.currentPageDecl = headerPaginDecl.currentPage;
this.pageSizeDecl = headerPaginDecl.pageSize;
res.body.map((param) => {
this.Declaration_Data.push(param);
});
this.DeclarationDataSource = new MatTableDataSource<Element>(this.Declaration_Data);
// console.log('Your form data : ', this.DeclarationDataSource);
});
} else {
this.SUB_getDeclarationSearch = this.declarationsService.getDeclarations({ ...searchOBJ, IsFromDashboard: true, PageSize: this.pageSizeDecl, PageNumber: this.currentPageDecl }).subscribe((res) => {
this.Declaration_Data = [];
let headerPaginDecl = JSON.parse(res.headers.get('X-Pagination'));
this.elementsLengthDecl = headerPaginDecl.totalCount;
this.currentPageDecl = headerPaginDecl.currentPage;
this.pageSizeDecl = headerPaginDecl.pageSize;
res.body.map((param) => {
this.Declaration_Data.push(param);
});
this.DeclarationDataSource = new MatTableDataSource<Element>(this.Declaration_Data);
// console.log('Your form data : ', this.DeclarationDataSource);
});
}
}
在ngoninit 中呼叫了兩種方法:fillTable() 和fillTable2()。
我嘗試使用以下方法來收聽訂閱并等待他們
public testingforkJoin(): void {
forkJoin([this.SUB_getActSearch, this.SUB_getDeclarationSearch]
).subscribe(val =>
console.log("xxxxx", val));
// call some method here as soon as both are done
}
但事實證明 forkJoin 不能監聽訂閱,有沒有其他類似于 forkjoin 的訂閱方式?
有兩種方法包括 HTTP 請求,我想等待兩個網路請求完成并在完成后立即執行某些操作。
uj5u.com熱心網友回復:
我通常會宣告一些布爾變數來解決此類異步問題。在你的情況下,它看起來像:
isSearch: boolean; isDeclarationSearch: boolean;
然后我將每個變數初始化為 false,在每個變數的末尾我將值更改為 true,然后我創建了當兩個值都為 true 時作業的新函式。
uj5u.com熱心網友回復:
forkJoin 的重點是你會訂閱它,而不是單獨訂閱,它會在訂閱中一次回傳所有結果
let call: [] = [];
call.push(this.declarationsService.getDeclarations1()); call.push(this.declarationsService.getDeclarations2()); call.push(this.declarationsService.getDeclarations3());
forkJoin(call).subscribe((res) => { });
或者
forkJoin({
'prop1' :this.declarationsService.getDeclarations1()
'prop2' : this.declarationsService.getDeclarations2()
}).subscribe((result) => { result.prop1; result.prop2 });
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/365407.html
