Im khá mới đối với RxJ và tôi muốn hiểu cách tốt nhất là làm việc với Rx kết hợp với Lời hứa.RxJs Tạo quan sát từ kết quả Hứa hẹn
Điều tôi muốn tạo là dịch vụ trong Góc hoạt động giống như mẫu điều phối sự kiện và phát ra sự kiện khi lời hứa hoàn tất. Những gì tôi cũng yêu cầu là, nếu không có (sự kiện) thuê bao quan sát không bao giờ được gọi. Điều cuối cùng tôi muốn xảy ra là mọi người đăng ký tiếp theo có thể nhận được kết quả tương tự mà không kích hoạt yêu cầu khác đối với máy chủ. tôi đã quản lý để thực hiện giải pháp của riêng tôi ở đây:
// ... CountryService code
var COUNTRIES_LOADED = Rx.Observable
.create(function (observer) {
$http
.get('/countries')
.then(function (res) {
observer.onNext(res);
}, function (err) {
observer.onError(err);
})
.finally(function() {
observer.onCompleted();
});
})
.shareReplay();
Bây giờ bất cứ lúc nào tôi đăng ký một "người nghe" mới để chịu các quan sát sẽ được kéo. Mọi người đăng ký mới sẽ nhận được giá trị được lưu trong bộ nhớ cache mà không cần chạm lại vào máy chủ.
Vì vậy, bên "người tiêu dùng" của tôi (góc Directive) Tôi muốn làm một cái gì đó như thế này:
// ... countryInput directive code:
COUNTRIES_LOADED.subscribe(function (response) {
// Fill in countries into scope or ctrl
scope.countries = response.countries;
});
Bất kỳ thuê bao trong tương lai để người quan sát COUNTRIES_LOADED PHẢI KHÔNG kích hoạt một yêu cầu $ http. Tương tự như vậy, nếu chỉ thị không bao giờ được bao gồm trên trang, $ http sẽ không bao giờ được gọi.
Giải pháp ở trên hoạt động, tuy nhiên tôi không biết về những hạn chế tiềm ẩn và tác động bộ nhớ của phương pháp này. Đây có phải là giải pháp hợp lệ không? Có cách nào tốt hơn/thích hợp hơn để đạt được điều này bằng cách sử dụng RxJs?
Rất cám ơn!
kiểm tra liên kết này sử dụng rxjs với angularjs http://cvuorinen.net/2016/05/using-rxjs-observables-with-angularjs-1/ –
giải pháp của bạn có vẻ ổn, tôi không nghĩ rằng bạn có thể nghĩ ra điều gì đó tốt hơn thế này. – estus