【问题标题】:setTimeout and the syntax with promises? [duplicate]setTimeout 和 promise 的语法? [复制]
【发布时间】:2020-01-10 01:22:40
【问题描述】:

我正在阅读一本关于 javascript 的书,其中有一段我不明白的代码。

setTimeout( () => setTimeout(console.log, 0 , value *2), 1000);

这里到底发生了什么?有两个setTimeout,我想我只了解内部的一个。我不明白 () => 函数在做什么?你能解释一下吗?

我确实关注:

setTimeout(console.log, 0 , value *2)

在 0 毫秒后将参数 'value*2' 传递给函数/方法 console.log()。我也明白 setTimeout() 返回 timeoutId。

我不知道其他的。

我看到与以下代码类似的内容:

let p1 = new Promise((resolve, reject) => resolve());
setTimeout(console.log, 0, p1);  //Promise <resolved>

这个也不明白。

【问题讨论】:

  • 这是一个箭头函数。所以,这是一个setTimeout,它需要 1 秒来触发其中的箭头函数,它返回另一个 setTimeout(因为没有{},它在 0 毫秒过去后触发 console.log value*2 给它。
  • 这是作业吗?我问是因为,除了教育解释之外,这是毫无意义的代码 - 没有理由这样做。您可以使用单个 setTimeout() 获得相同的结果。
  • 哦,我应该声明setTimeout 确实返回了timeoutID,但它会根据第二个参数的毫秒数触发传递给第一个参数的函数(异步)我>。所有其他参数都传递给您的函数参数。

标签: javascript promise settimeout


【解决方案1】:

setTimeout( () =&gt; setTimeout(console.log, 0 , value *2), 1000); 设置超时... 设置超时。因此,在 1 秒后外部超时结束后,将调用内部函数(() =&gt; {...} 是一个箭头函数,您现在可以将其读为function() {...})。此函数设置另一个延迟为 0 的超时,然后调用 console.log,将 value * 2 作为参数传递。因此,1 秒后,value * 2 会记录到控制台。

使用 Promise 代码,let p1 = new Promise((resolve, reject) =&gt; resolve()); 行创建了一个立即解决的 Promise。因此,在将 Promise 记录到控制台时的下一行,它会显示 Promise&lt;resolved&gt;

【讨论】:

    【解决方案2】:
    setTimeout(console.log, 0 , value *2)
    

    相同
    setTimeout(function() { console.log(value *2) }, 0)
    

    所以

    setTimeout( () => setTimeout(console.log, 0 , value *2), 1000);
    

    表示设置一秒超时,即设置另一个超时0秒,并打印value *2

    let p1 = new Promise((resolve, reject) => resolve());
    setTimeout(console.log, 0, p1);
    

    表示0秒后打印出promise p1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 2021-09-17
      相关资源
      最近更新 更多