【问题标题】:return first value from setTimeout function从 setTimeout 函数返回第一个值
【发布时间】:2021-11-16 13:09:37
【问题描述】:

我有一个很大的 setTimeout 函数,它生成每秒变化的动态变量。对于我拥有的其他函数,我想在调用 setTimeout 函数时获得一个变量,因为我想将它用于另一个不包含在其中的函数。所以本质上,我想要我调用的第一个值,我不想干扰函数运行。

我该怎么做呢?

基本上:

function schedule() {
  <<changingvalue is here>>
  setTimeout(function () { schedule() }, 1000);
}

console.log(<<changingvalue at a particular instance>>);

【问题讨论】:

  • 在另一个变量中保存“在特定实例中改变值”。
  • 恕我直言,最好的方法是承诺,因为您必须等待大约 1 秒才能获得价值

标签: javascript settimeout


【解决方案1】:

您可以在第一个 setTimeout 完成后使用承诺返回值

let a = 1234;

function schedule() {
  ++a;
  return new Promise(r => setTimeout(function () { schedule(); r(a); }, 1000));
}

(async () => {
  console.log(await schedule());
})();

或者直接返回值

let a = 1234;

function schedule() {
  ++a;
  setTimeout(function () { schedule(); }, 1000);
  return a;
}

console.log(schedule());

【讨论】:

    【解决方案2】:

    您可以使用class。在构造函数中初始化计数,然后调用loop 方法更新计数,然后每秒再次调用一次。

    然后您可以从该类创建一个新实例,然后在需要时从您的其他函数中调用getCount

    在此示例中,我有一个间隔,每三秒调用一次 getCount,因此您将看到输出:3、6、9 等。

    class Timeout {
    
      constructor() {
        this.count = 0;
        this.loop();
      }
      
      getCount() {
        return this.count;
      }
      
      loop() {
        this.count = this.count + 1;
        setTimeout(this.loop.bind(this), 1000);
      }
    
    }
    
    const timeout = new Timeout();
    
    setInterval(() => {
      console.log(timeout.getCount());
    }, 3000);

    【讨论】:

      猜你喜欢
      • 2018-07-31
      • 2020-11-20
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      相关资源
      最近更新 更多