使用RxJS處理多個(gè)Http請求的Angular.js 4
進(jìn)入某個(gè)頁面時(shí),需要從多個(gè)API地址獲取數(shù)據(jù)然后進(jìn)行顯示。管理多個(gè)異步數(shù)據(jù)請求會(huì)比較困難,可以借助Angular Http服務(wù)和RxJS庫提供的功能來實(shí)現(xiàn)上述的功能。處理多個(gè)請求的方式有多種處理多個(gè)請
進(jìn)入某個(gè)頁面時(shí),需要從多個(gè)API地址獲取數(shù)據(jù)然后進(jìn)行顯示。管理多個(gè)異步數(shù)據(jù)請求會(huì)比較困難,可以借助Angular Http服務(wù)和RxJS庫提供的功能來實(shí)現(xiàn)上述的功能。
處理多個(gè)請求的方式
有多種處理多個(gè)請求的方式,可以使用串行或并行的方式。其中,mergeMap操作符用于從內(nèi)部的Observable對象中獲取值,然后返回給父級流對象。通過合并Observable對象,可以在源Observable對象發(fā)出值時(shí),合并輸出的值。
使用mergeMap操作符合并Observable對象
在上面示例中,mergeMap操作符被用來合并兩種Observable類型:源Observable對象和內(nèi)部Observable對象。只有當(dāng)內(nèi)部的Observable對象發(fā)出值后,才會(huì)合并源Observable對象輸出的值,并最終輸出合并的值。
使用forkJoin合并多個(gè)Observable對象
forkJoin是Rx版本的(),即表示等到所有的Observable都完成后,才一次性返回值。通過使用forkJoin操作符,可以合并多個(gè)Observable對象。
使用Angular Http服務(wù)處理Http請求
為了處理Http請求,可以使用Angular Http服務(wù)。通過依賴注入方式注入http服務(wù),然后在ngOnInit方法中調(diào)用http對象的get方法來獲取數(shù)據(jù)。
使用mergeMap優(yōu)化處理多個(gè)Http請求的流程
在上面示例中,通過mergeMap操作符,解決了嵌套訂閱的問題。可以通過RxJS庫中提供的mergeMap操作符來優(yōu)化處理多個(gè)Http請求的流程。
使用forkJoin處理多個(gè)并行的Http請求
除了mergeMap外,還可以使用forkJoin操作符來處理多個(gè)并行的Http請求。forkJoin操作符接收一個(gè)Observable對象列表,然后并行地執(zhí)行它們。一旦列表的Observable對象都發(fā)出值后,forkJoin操作符返回的Observable對象會(huì)發(fā)出新的值,即包含所有Observable對象輸出值的列表。
使用switchMap操作符取消無用的Http請求
除了mergeMap外,RxJS中的switchMap操作符也很有用。switchMap操作符用于對源Observable對象發(fā)出的值做映射處理。當(dāng)有新的Observable對象出現(xiàn)時(shí),會(huì)在新的Observable對象發(fā)出新值后,退訂前一個(gè)未處理完的Observable對象。在實(shí)際使用Http服務(wù)的場景中,可以利用switchMap操作符來取消無用的Http請求,例如實(shí)現(xiàn)AutoComplete功能。