angular http post 重試
阿新 • • 發佈:2020-07-28
1 // import { retry, retryWhen, catchError, map, tap, delayWhen, scan, takeWhile } from 'rxjs/operators'; 2 // import { timer } from 'rxjs/observable/timer'; 3 //帶重試的http post請求例子 4 test() { 5 let httpURL = "http://localhost:3000/test" 6 this.http.post(httpURL, {}).timeout(1800000).pipe(map((val, index) => {7 console.log("index", index) 8 if (val["success"] != true) { 9 throw val 10 } 11 return val 12 }), retryWhen(errors => { 13 // console.log("retryWhen errors", errors) 14 return errors.pipe( 15 16 // tap(val => console.log("retryWhen", val)),17 delayWhen(() => timer(3 * 1000)),//延遲多少秒後重試 18 scan(count => { 19 // console.log("count", count) 20 return count + 1 21 }, 0) 22 , 23 takeWhile(count => { 24 return count < 3 //重試次數 25 }) 26 ) 27 } 28 )).subscribe(res => {29 30 console.log(res) 31 }, err => { 32 33 console.log(err) 34 }) 35 }