简体   繁体   English

如何用 observable 重构 function

[英]How to refactor function with observable

How can I refactor this part of code?如何重构这部分代码? I want to reduce the amount of 'else if' statements.我想减少“else if”语句的数量。 I tried to use ||我尝试使用 || operator, but it's doesn't work.运算符,但它不起作用。

getNominieesByStage(stage_key: string): Observable<any> {

    const simpleObservable$ = new Observable<any>((observer) => {

      if (stage_key === 'key1') {
        observer.next(NOMINIEES[`${stage_key}`]);
      } else if (stage_key === 'key2') {
        observer.next(NOMINIEES[`${stage_key}`]);
      } else if (stage_key === 'key3') {
        observer.next(NOMINIEES[`${stage_key}`]);
      } else if (stage_key === 'key4') {
        observer.next(NOMINIEES[`${stage_key}`]);
      } else if (stage_key === 'key5') {
        observer.next(NOMINIEES[`${stage_key}`]);
      } else if (stage_key === 'key6') {
        observer.next(NOMINIEES[`${stage_key}`]);
      } else {
        observer.next([NOMINIEES[`${stage_key}`]]);
      }

      // observable execution

      observer.complete();
    });

    return simpleObservable$;
  }

Your code is currently functionaly equivalent to:您的代码目前在功能上等同于:

 const simpleObservable$ = new Observable<any>((observer) => {
   observer.next(NOMINIEES[`${stage_key}`]);
   observer.complete();
 }
 return observer;

Without any if statement.没有任何if语句。

Also, this can be simplified further by static Observable creation methods:此外,这可以通过 static Observable 创建方法进一步简化:

return Rx.Observable.of(NOMINIEES[`${stage_key}`]);

create an array of keys and return values then use find创建一个键数组并返回值,然后使用find

var v = someKeyValueTypeArray.find(x=>x == 'key1').someReturnValue;
observer.next(v);
observer.complete();

use instead of connected if-statements a switch case -element:使用switch case元素代替连接的 if 语句:

switch(stage_key) { 
   case 'key1','key2','key3': { 
       observer.next(NOMINIEES[`${stage_key}`]);
      break; 
   } 
   default: { 
      //statements; 
      break; 
   } 
} 

You could test for a regular expression like你可以测试一个正则表达式,比如

if(/^key[1-6]/.test(stage_key)) {
   observer.next(NOMINIEES[`${stage_key}`]);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM