【问题标题】:How to repeat a function without effecting repeating the token如何在不影响重复令牌的情况下重复功能
【发布时间】:2022-01-20 09:44:55
【问题描述】:

如何修改重复循环函数而不重复函数 rowcount() 中的令牌变量?

function rowcount()
{ 
  var token = getAccessToken();
  var module = "sHistory";
  var rows = 0;
  var go = true;
  var i = 1;
  var data;
  
   
   while (go) {
    data = getRecordsByPage(i,200,token,module);
    
    if (Number(data.info.count) < 200) {
      go = false;
    };
    if ((i%10) == 0) {
       go = false; 
    }
    rows = Number(rows) + Number(data.info.count);
      i++;
   
      Logger.log(rows)
      }
      return rows
   }
  
  
function repeatloop()
{
  let counter = 0;

  for(var i = 1; i <= 93; i++)
      {
        {
        Utilities.sleep(10000);
        Logger.log(i);

        counter += rowcount();
        Logger.log(counter);
        }
      }
      return rowcount().rows;   
  } 

我还想做的是让计数继续,因为现在它以 2000 的增量递增,但我需要它继续像 200...400..600..800...1000.. .1200...1400...1600...1800...2000...2200。它一直持续到循环停止。

【问题讨论】:

    标签: javascript loops google-apps-script


    【解决方案1】:

    您可以像这样使令牌成为全局变量:

    var token;
    function rowcount()
    {
      var module = "sHistory";
      var rows = 0;
      var go = true;
      var i = 1;
      var data;
      
       
       while (go) {
        data = getRecordsByPage(i,200,token,module);
        
        if (Number(data.info.count) < 200) {
          go = false;
        };
        if ((i%10) == 0) {
           go = false; 
        }
        rows = Number(rows) + Number(data.info.count);
          i++;
       
          Logger.log(rows)
          }
          return rows
       }
      
      
    function repeatloop()
    {
      let counter = 0;
      token = getAccessToken();
    
      for(var i = 1; i <= 93; i++)
          {
            {
            Utilities.sleep(10000);
            Logger.log(i);
    
            counter += rowcount();
            Logger.log(counter);
            }
          }
          return rowcount().rows;   
      }
    

    还是我理解错了?

    【讨论】:

    • 我想你错过了理解我,所以函数 repeatloop() 重复所有函数 rowcount(),包括令牌,我认为这是一个问题,因为每次循环运行它都会刷新令牌每次导致问题,在循环的某些间隔给我一个无效令牌的错误,我认为这是因为令牌在每个循环中都会刷新,而且它不应该,所以我的问题是,我如何循环函数 rowcount() rowcount 不会影响令牌的循环
    • @MrJnrDev 将其声明为全局变量。 var token = getAccessToken();函数外rowcount()
    • 我尝试了上面的,它仍然给出同样的错误
    • @MrJnrDev 执行 rowcount() 函数时没有刷新帖子代码中的令牌,所以我看不到问题
    【解决方案2】:

    我会将令牌作为 可选参数 传递,以使用 GLOBAL 变量:

    function rowcount(_token = null)
    { 
      let token;
      if (_token) {token = _token;}
      else {token = getAccessToken();} 
    
      var module = "sHistory";
      var rows = 0;
      var go = true;
      var i = 1;
      var data;
      
       
       while (go) {
        data = getRecordsByPage(i,200,token,module);
        
        if (Number(data.info.count) < 200) {
          go = false;
        };
        if ((i%10) == 0) {
           go = false; 
        }
        rows = Number(rows) + Number(data.info.count);
          i++;
       
          Logger.log(rows)
          }
          return rows
       }
      
      
    function repeatloop()
    {
      let token = getAccessToken();
      let counter = 0;
    
      for(var i = 1; i <= 93; i++)
          {
            {
            Utilities.sleep(10000);
            Logger.log(i);
    
            counter += rowcount(token);
            Logger.log(counter);
            }
          }
          return rowcount(token).rows;   
      } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-10
      • 2013-10-28
      • 2017-03-13
      • 2021-08-01
      • 2017-01-12
      • 2016-12-23
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多