zoukankan      html  css  js  c++  java
  • [AngularJS + RxJS] Search with RxJS

    When doing search function, you always need to consider about the concurrent requests. 

    AEvent ----(6s)---> AResult

    ------(100ms)-------

    BEvent -----(1s)---> BResult

    It means A event needs to take 6 seconds to get the result, but B only need 1 second, in the between there is 100ms. 

    So B result will appear on the DOM first, but later will be overwritten by A result once A finished. 

    To overcome this problem, we can use RxJS:

    class HelpSearchCtrl {
        constructor(HelpSearchService, $scope, $log) {
            this.HelpSearchService = HelpSearchService; 
            this.searchTerm = null;
            this.$log = $log;
            this.$scope = $scope;
    
            let listener = Rx.Observable.create( (observe)=>{
               
                 this.$scope.$watch( ()=>{
                    return this.searchTerm;
                 }, ()=>{
                     observe.onNext(this.searchTerm);
                 })
            })
            .debounce(500)
            .flatMapLatest( (searchTerm)=> {
                return Rx.Observable.fromPromise(this.doSearch(searchTerm));
            }).subscribe();
    
            this.$scope.$on('$destory', ()=>{
                this.$log.debug('cancelled!');
                listener.dispose();
            })
        } 
    
        doSearch(searchTerm) {
            return this.HelpSearchService.searchForContent(searchTerm);
        }
    }
    
    const clmHelpSearchDirective = () => {
        return {
            restrict: 'EA',
            scope: {},
            replace: true,
            template: require('./help-search.html'),
            controller: HelpSearchCtrl,
            controllerAs: 'vm',
            bindToController: true
        }
    };
    
    export default (ngModule)=> {
        ngModule.directive('clmHelpSearch', clmHelpSearchDirective);
    }
  • 相关阅读:
    go通道小案例
    go执行cmd命令并获取输出内容
    vue快速生成二维码
    vue.js数字简化 万转化k显示
    uniapp实现小程序获取用户信息
    实现图片预加载功能
    C# MD5加密字符串方法
    一个封装的 HttpClientHelper
    简易通过队列存储并异步打日志实现
    变量
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5185266.html
Copyright © 2011-2022 走看看