Javascript 如何在Lodash中延迟打印某些内容

Javascript 如何在Lodash中延迟打印某些内容,javascript,functional-programming,lodash,yarnpkg,Javascript,Functional Programming,Lodash,Yarnpkg,我在JS/Lodash中做了一个练习,每次延迟5秒打印10首歌曲。问题是,我得到的是歌曲的10倍,索引是第14。 我不知道我在哪里犯了错误,如果有任何帮助,我将不胜感激 const utwory = [{ "author": "Queen", "song": "Bohemian Rhapsody", "place": 1, "change": 0

我在JS/Lodash中做了一个练习,每次延迟5秒打印10首歌曲。问题是,我得到的是歌曲的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()



    
   
const utwory=[{
“作者”:“女王”,
“歌曲”:“波希米亚狂想曲”,
“地点”:1,
“更改”:0
},
{
“作者”:“深紫色”,
《歌》:《时光中的孩子》,
“地点”:2,
“改变”:2
}
]
函数ex7(){
设i=0;
而(i<10){
_.延迟(功能(arr){
console.log(arr[i].author+“”+arr[i].song)
},10000,乌特沃里)
i+=1
}
}
ex7()

当调用
.delay()
中的函数时,它使用
i
的当前值,即10。您可以通过将循环更改为for循环来解决此问题,并使用
let i
,这样
i
将在闭包中显示it的值

此外,您可以通过将当前项
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}]
函数ex7(){
for(设i=0;i

谢谢,我刚刚更改了,而改为for,现在可以使用了,但我真的不明白为什么需要I=11?当它第一次触发延迟时,i=0,那么为什么它将11作为一个值?对不起,最新的值是10,因为循环在
i<10
失败时结束,因为
i
是10。更新了答案。没关系,情况不是这样-情况仍然是这样,当进入第一个延迟i=0时,为什么需要10?第二个问题是如何在每首歌曲之间留出5秒的间隔,因为现在它会在5秒后打印所有歌曲?内部函数从调用时起就被调用,并且几乎所有函数都一起被调用。您需要自己增加时间-我在代码段中使用
1000*(I+1)
。延迟的初始调用只是设置计时器。当定时器完成时,内部函数被调用-按照定时器设置的原始顺序为5000毫秒。