如何在 Lodash 中延迟打印内容

How to print something in delay in Lodash

我在 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()



    
   

调用_.delay()里面的函数时,使用的是i的当前值,也就是10。可以把循环改成for循环来解决,用let i,所以 i 它的值在闭包中。

此外,您可以通过将当前项目 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()
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous"></script>