代码之家  ›  专栏  ›  技术社区  ›  Dean Radcliffe

您如何指定一个返回观测值的API?

  •  0
  • Dean Radcliffe  · 技术社区  · 7 年前

    一个可观察的-随着时间的推移收集-是一个有用的东西,能够通过网络请求。feed最好建模为可观察的,而不是必须轮询和diff才能请求的静态数组。

    我的问题-如果我想创建一个允许您这样做的Web端点

    web-tail -f http://somewhere.com/biz-quotes
    

    此服务由虚拟实用程序查询 web-tail ,每5秒钟会返回一个新的简洁的业务报价,如“自定义部门协同”。我可以写这样的 网尾 与WebSockets一起使用,并为将发射对象的哪个字段发射到控制台建立约定。但是我要用什么语言编写一个可消费的规范呢?

    可观察规范是否足够成熟以供参考?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Picci    7 年前

    最重要的是, .

    This nice article

    简而言之,这是您需要的类型脚本代码。

    import { Observable } from 'rxjs';
    import { Subject } from 'rxjs';
    import { Observer } from 'rxjs';
    
    import * as socketIoClient from 'socket.io-client';
    
    export class SocketObs {
        private socket: SocketIOClient.Socket;
    
        private connect = new Subject<any>();
        private disconnect = new Subject<any>();
    
        constructor(url: string);
        constructor(input: any) {
            this.socket = socketIoClient(input);
            this.socket.on('connect',
                () => {
                    this.connect.next();
                    // complete to make sure that this event is fired only once
                    this.connect.complete();
                }
            );
            this.socket.on('disconnect',
                () => {
                    this.disconnect.next();
                    // complete to make sure that this event is fired only once
                    this.disconnect.complete();
                }
            );
    
        }
    
        send(event, message?) {
            this.socket.emit(event, message);
        }
        onEvent(event): Observable<any> {
            return new Observable<any>((observer: Observer<any>) => {
                this.socket.on(event, data => observer.next(data));
            });
        }
        onDisconnect() {
            return this.disconnect.asObservable();
        }
        onConnect() {
            return this.connect.asObservable();
        }
    
        close() {
            this.socket.close();
        }
    }
    

    onEvent