我是RxJs的新手,我想了解将Rx与Promises结合使用的最佳方法.
我想要创建的是Angular中的一项服务,它充当事件调度程序模式,并在承诺完成后发出事件.我还要求的是,如果没有(事件)订阅者,则observable永远不会被调用.我想要发生的最后一件事是,observable的任何后续订阅者获得相同的结果而不会触发对服务器的另一个请求.我已经设法在这里实现我自己的解决方案:
// ... 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();
Run Code Online (Sandbox Code Playgroud)
现在,任何时候我订阅一个新的"听众"来对象观察者将被拉.任何新订阅者都将获得缓存的值,而无需再次触及服务器.
所以在我的"消费者"(Angular Directive)中,我想做这样的事情:
// ... countryInput directive code:
COUNTRIES_LOADED.subscribe(function (response) {
// Fill in countries into scope or ctrl
scope.countries = response.countries;
});
Run Code Online (Sandbox Code Playgroud)
COUNTRIES_LOADED观察者的任何未来订阅者都不得触发$ http请求.同样,如果指令从未包含在页面中,则永远不会调用$ http.
上面的解决方案有效,但我不知道这种方法的潜在缺点和内存含义.这是有效的解决方案吗?有没有更好/更合适的方法来实现这个使用RxJs?
非常感谢!
我想从Angular 5+中的生产版本中排除某些组件.到目前为止,我已阅读并了解环境变量的概念,但根据我的理解,这些概念在运行时可用.我正在寻找的是实际排除某些模块被导入,以便它们的代码不会进入生产构建(文件).
我也不想
<div *ngIf="isProduction">...</div>放置一下,我宁愿做的事情是这样的:
Component({
...
templateUrl: environment.production ? 'app.prod.html' : 'app.html'
})
但是,由于Angular编译器的工作原理,这也是不可能的.
我想这个问题的答案是调整angular-cli,但鉴于没有好的文档(我能找到),我想知道是否有人有更好的想法?
在我的弹性搜索索引"人"中有以下文件:
{"name": "John", "district": 1},
{"name": "Anne", "district": 1},
{"name": "Mary", "district": 2},
{"name": "Bobby", "district": 2},
{"name": "Nick", "district": 1},
{"name": "Bob", "district": 3},
{"name": "Kenny", "district": 1}
Run Code Online (Sandbox Code Playgroud)
我想获得一个区域为2或1的文档的结果,但最多只有2个.所以,如果以上是我的整个索引,我希望它返回:
{"name": "John", "district": 1},
{"name": "Anne", "district": 1},
{"name": "Mary", "district": 2},
{"name": "Bobby", "district": 2},
Run Code Online (Sandbox Code Playgroud)
是否有可能通过弹性的单个查询来实现这一点?非常感谢您的帮助!