【问题标题】:Retry Observable Until Condition is met重试 Observable 直到满足条件
【发布时间】:2019-11-10 01:37:45
【问题描述】:

这是我的打字稿函数isIndexComplete

isIndexComplete(index_id:string): Observable<boolean> {
        console.log("Entering get indexer status");
        return this._http.get<IIndexerGetStatus>(`http://${environment.agent_ip}:${environment.agent_port}/`,{
            params:{
                action:'IndexerGetStatus',
                epochTime:'true',
                maxResults:'1',
                responseFormat:'simplejson',
                Index:index_id
            }
        }).pipe(
            map(response => {
                if (response.autnresponse.responsedata.item[0].percentage_processed == '100'){
                    console.log("percentage_processed "+ response.autnresponse.responsedata.item[0].percentage_processed);
                    return true;
                }
                else{
                    console.log("percentage_processed "+ response.autnresponse.responsedata.item[0].percentage_processed);
                    this.currentProgress = response.autnresponse.responsedata.item[0].percentage_processed;
                    this.isIndexComplete(index_id).subscribe();
                    return false
                }
            })
        )
    }

我需要继续从 SaveAgentRecord 调用 isIndexComplete 直到 this.value 达到 100%

SaveAgentRecord(topicText:string, topicTextBoolean:string): void {
    this._agentstore.createAgentEntry(topicText, topicTextBoolean).subscribe( response =>{
        var index_id = this._agentstore.getIndexID(response);
        this._agentstore.isIndexComplete(index_id).subscribe(response => {
            this.AgentRuleCreationProgress = +this._agentstore.currentProgress;
            this.value = this.AgentRuleCreationProgress;
            if(this.value < 100){
                console.log("Value less than 100");
            }
        })
        console.log("Get Index Status shows 100%")
        this.ShowAgentCreated(topicText);
    });
}

我该怎么做?我也不想执行 this.ShowAgentCreated(topicText) 直到它的 100%

【问题讨论】:

标签: typescript rxjs


【解决方案1】:

类似的东西,但用您的this._http.get&lt;IIndexerGetStatus&gt; 替换源并根据. currentProgress 属性更改百分比

defer(()=>{
  let percentage=0
  return source.pipe(
    tap(_=>percentage++),
    repeatWhen((e) => {
    return timer(2000).pipe(takeWhile(_=>percentage<2))
  }),
)
}).subscribe()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多