【问题标题】:How to print something in delay in Lodash如何在 Lodash 中延迟打印一些东西
【发布时间】:2021-07-06 08:47:12
【问题描述】:

我在 JS/Lodash 中有一个练习,以每首 5 秒的延迟打印十首歌曲。问题是,我得到这首歌的 10 倍,那个指数是第 14 位。 我不知道我在哪里犯了错误,如果有任何帮助,将不胜感激。

const utwory = [{
    "author": "Queen",
    "song": "Bohemian Rhapsody",
    "place": 1,
    "change": 0
  },
  {
    "author": "Deep Purple",
    "song": "Child in time",
    "place": 2,
    "change": 2
  }
]

function ex7() {
  let i = 0;


  while (i < 10) {
    _.delay(function(arr) {
      console.log(arr[i].author + " " + arr[i].song)
    }, 10000, utwory)

    i += 1
  }
}
ex7()



    
   

【问题讨论】:

    标签: javascript functional-programming lodash yarnpkg


    【解决方案1】:

    _.delay()里面的函数被调用时,使用i的当前值,即10。可以通过将循环改为for循环来解决,使用let i,所以@987654324 @ 是否会在闭包中显示它的值。

    此外,您可以通过将当前项目utwory[i] 传递给延迟来避免此问题,而只需将console.log() 传递给回调中的项目。

    我在这里使用了这两种方法:

    const utwory = [{"author":"Queen","song":"Bohemian Rhapsody","place":1,"change":0},{"author":"Deep Purple","song":"Child in time","place":2,"change":2}]
    
    function ex7() {
      for(let i = 0; i < utwory.length; i++) {
        _.delay(function({ author, song }) {
          console.log(`${author} ${song}`)
        }, 1000 * (i + 1), utwory[i]) // set the item to print here
      }
    }
    
    ex7()
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous"&gt;&lt;/script&gt;

    【讨论】:

    • 谢谢,我刚刚更改了 for 并且它现在正在工作,但我真的不明白为什么需要 i=11?到第一次触发延迟时,i = 0,那为什么取11作为值呢?
    • 抱歉,最新的是 10,因为 i &lt; 10 失败时循环结束,因为 i 是 10。更新了答案。
    • 没关系,情况并非如此-情况仍然如此,为什么在进入第一个延迟i = 0时需要10?第二个问题是如何在每首歌曲之间设置 5 秒的间隔,因为现在它会在 5 秒后打印所有歌曲?
    • 内部函数从被调用的那一刻起就被调用,而且几乎都是一起调用的。您需要自己增加时间 - 我在 sn-p 中使用1000 * (i + 1)
    • 没错。延迟的初始调用只是设置计时器。当定时器完成时调用内部函数 - 5000 毫秒,按照定时器设置的原始顺序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多