【问题标题】:How get Observable from etcd v2 watch如何从 etcd v2 watch 中获取 Observable
【发布时间】:2022-02-17 18:35:57
【问题描述】:
_watch(key: string): Observable<AxiosResponse<any>> {
    let url: string = `${this.buildUrl(key)}?wait=true&recursive=true`;
    return this.httpService.get(url)
        .pipe(
            map((resp) => resp),
            tap(data => console.log(data))
        )
}

watch(key: string) {
    this._watch(key).subscribe({
        next: (v) => console.log(v),

        error: (err) => {
            if (!err.response) return new EtcdConnectionError();
            let data = err.response.data;
            switch (data.errorCode) {
                // https://etcd.io/docs/v2.3/errorcode/
                case 100:
                    return new EtcdNotFoundError(key);
                default:
                    return new EtcdCommonError(data.message);
            }
        },
        complete: () => console.info('complete')
    })
}

我隐约了解如何与 Observable 交互,如果您能告诉我如何进一步了解它,我将不胜感激,我阅读了基本文档。

代码 +/- 像这样工作:

  1. 请求已发送
  2. 如果有变化,就会有响应 以此类推

我应该怎么做才能获得周期性状态,或者我的错误是什么?

更新

watch(key: string) {
        return this._watch(key).subscribe({

我忘记标明return,今天受苦了)))))))))))))))))))))))))))))

【问题讨论】:

    标签: typescript rxjs nestjs etcd2


    【解决方案1】:

    您向 etcd api 发出 http 请求。当有回复时,您会通过next 函数收到回复。然后 observable 完成。

    您想定期轮询 api 并将结果写入 observable 吗?

    【讨论】:

    • 原来我需要递归指定,但是如果我把return of(1,2,3)in_watch,一切正常
    • of(1,2,3) 发出三个值。您的 http 请求返回的 observable 只发出一次然后完成。能给个你使用的etcd的api端点的链接吗?
    猜你喜欢
    • 2019-10-14
    • 2020-09-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多