1

在执行 prefillLoginId 时,我总是得到 false (默认值),即使订阅中的每个代码都在执行。请帮助我返回 True 值。

private prefillLoginId(currentLoginId: any, cms: any) 
    {
        let status =false;
        let patterns = [];            
        this.subSink.sink = cms.subscribe(content => {           
           
           patterns = !!content['ClientSideValidations']['LoginId'] ? content['ClientSideValidations']['LoginId'] : [''];          
           status = this.patternCheckStatus(patterns, currentLoginId);;
           });           
        return status;
    }

   private patternCheckStatus(patterns:any,currentLoginId)
    {
        let patternCheckStatus = false;
        let regex: RegExp;
        patterns.forEach(x => {
            regex = new RegExp(x);   
             if (regex.test(currentLoginId)) {                              
              patternCheckStatus = true;
             }
            });
            
            
            return patternCheckStatus;
    }
4

1 回答 1

1

这是因为这里的异步操作。subscribe 中的代码在从您的方法返回状态后执行,并且当它返回其值为 false 时。你应该改变你的方法来返回 observable,如下所示:-

private prefillLoginId(currentLoginId: any, cms: any) 
    {
        let status =false;
        let patterns = [];            
        return cms.pipe(map(content => {           
           
           patterns = !!content['ClientSideValidations']['LoginId'] ? content['ClientSideValidations']['LoginId'] : [''];          
           status = this.patternCheckStatus(patterns, currentLoginId);;
           return status;
        }));           
    }

并且无论您在哪里调用此方法,都可以像这样使用它:-

prefillLoginId.subscribe((status) => console.log(status));
于 2021-08-11T19:45:28.797 回答