câu trả lời cartant của trên hoạt động tốt, và trả lời cho câu hỏi đã được hỏi (Làm thế nào tôi có thể xác định điều này trong Typecript, để tôi có thể nhập rxjs/Observable và toán tử này, như tôi làm với các toán tử rxjs?)
Gần đây tôi phát hiện ra điều hành let
mà nếu bạn không thực sự cần phải có chức năng thực hiện như một hành, vẫn sẽ cho phép bạn KHÔ lên mã của bạn.
Tôi bắt đầu triển khai dịch vụ góc 2 để giao tiếp với phụ trợ đường ray và biết rằng hầu hết các cuộc gọi api của tôi sẽ trông rất giống nhau vì vậy tôi muốn thử và đặt nhiều thứ phổ biến vào một chức năng.
Hầu như tất cả các cuộc gọi sẽ làm như sau:
- retry trên một lỗi (chức năng của tôi dưới đây cần làm việc nhiều hơn về phía trước đó)
- bản đồ phản ứng http thành một nguyên cảo cục bộ được định nghĩa lớp (thông qua json-typescript-mapper)
- xử lý lỗi
Dưới đây là một ví dụ về sử dụng của tôi let
điều hành để đáp ứng http tôi thông qua một chức năng chung (tay leResponse) thông qua toán tử rxjs.
handleResponse<T>({klass, retries=0} :{klass:any,retries?:number }) : (source: Observable<Response>) => Observable<T> {
return (source: Observable<Response>) : Observable<T> => {
return source.retry(retries)
.map((res) => this.processResponse(klass,res))
.catch((res) => this.handleError(res));
}
}
processResponse(klass, response: Response) {
return deserialize(klass, response.json());
}
handleError(res: Response) {
const error = new RailsBackendError(res.status, res.statusText);
return Observable.throw(error);
}
getUserList({page=1,perPage=30,retry=0}: { page?:number, perPage?:number, retry?:number }={}) : Observable<UserList> {
const requestURL = `/api/v1/users/?${this.apiTokenQueryString}&page=${page}&per_page=${perPage}`;
return this.http.get(requestURL).let(this.handleResponse<UserList>({klass: UserList}));
}
Tôi có một câu hỏi tương tự, điều này trông giống như một giải pháp tốt. Vì đây chỉ là một chuỗi các toán tử, nó có xử lý các lỗi và hoàn thành theo mặc định không? Có vẻ như nó nên, nhưng tôi mới đến rxjs. – nPn
@nPn Yep, lỗi và số lần hoàn thành sẽ được nhận bởi người đăng ký có thể quan sát được. Không có gì cần phải làm ở đây. – cartant
Khi tôi thử phương pháp này, tôi nhận được lỗi này: 'Ngoại lệ: Không bắt buộc (trong lời hứa): Lỗi: Lỗi trong ./DashboardComponent class DashboardComponent - mẫu nội tuyến: 2: 4 do: __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable __. Observable.of (...) .restrictToCommand không phải là hàm LoạiError: __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable __. Observable.of (...). limitsToCommand không phải là dấu chấm câu. Bất kỳ ý tưởng? –