代码之家  ›  专栏  ›  技术社区  ›  garson

在节点中动态选择对象。js删除if/else if

  •  0
  • garson  · 技术社区  · 5 年前

    我在诺德工作。并试图通过基于一个变量更改代码段来消除if/else if。我想知道是否有一种方法可以更动态地做到这一点。我有两段代码是相同的,除了一段调用http,另一段调用https,这取决于URL的开头:

    const { http, https } = require('follow-redirects');
    if ((thisURL.split(":")[0] == "http")){
      const request = http.request(requestOptions, response => { 
        alist.href = response.responseUrl;
        resolve(response.responseUrl);
      });
      request.end();
    }
    else if ((thisURL.split(":")[0] == "https")){
     const request = https.request(requestOptions, response => { 
        alist.href = response.responseUrl;
        resolve(response.responseUrl);
      })
      request.end();
    }
    

    感觉应该有一种方法可以根据字符串的拆分直接调用http或https,而不是需要 if/else if ,但有办法做到这一点吗?

    1 回复  |  直到 5 年前
        1
  •  0
  •   Hassan Imam Ravi kant    5 年前

    不用if/else,你可以得到 protocol 使用 array#includes 检查协议。你可以创造 follow-redirects 基于一个protocolLookup。

    const { http, https } = require('follow-redirects');
    const [protocol] = thisURL.split(':');
    const potocolLookup = {"https": https, "http": http};
    
    if (["https", "http"].includes(protocol)) {
     const request = potocolLookup(protocol).request(requestOptions, response => { 
        alist.href = response.responseUrl;
        resolve(response.responseUrl);
      })
      request.end();
    }
    
    推荐文章