• [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);
    }
  • 相关阅读:
    内容绘制到Bitmap上不成功警示
    一些c++面试题目
    Windows Socket 主要API功能
    面试问题(一)
    函数指针与指针函数
    机器学习和数据挖掘的网站
    vs2010打开vs2008程序出现错误
    MATLAB将矩阵使用.txt文件格式保存
    指针实现值交换
    堆与栈的区别
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5185266.html
Copyright © 2020-2023  润新知