Javascript 如何在Lodash中延迟打印某些内容
我在JS/Lodash中做了一个练习,每次延迟5秒打印10首歌曲。问题是,我得到的是歌曲的10倍,索引是第14。 我不知道我在哪里犯了错误,如果有任何帮助,我将不胜感激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
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毫秒。