Javascript VueJS setTimeout未设置超时
我正在尝试使用Javascript VueJS setTimeout未设置超时,javascript,vue.js,settimeout,vuejs2,Javascript,Vue.js,Settimeout,Vuejs2,我正在尝试使用setTimeout分别播放声音。我有一个名为challenge的数组,它有(出于测试目的)[0,1,2,3],还有一个函数,它是play(n,true)用于启动声音和play(n,false)用于停止声音。我想做的是: 播放(0,真)等待1秒。播放(0,假)等待1秒 播放(1,真)等待1秒。播放(1,假)等待1秒 再见 到目前为止,我写的是: watch: { turn: function(turn) { if (this.turn === 0) {
setTimeout
分别播放声音。我有一个名为challenge
的数组,它有(出于测试目的)[0,1,2,3]
,还有一个函数,它是play(n,true)
用于启动声音和play(n,false)
用于停止声音。我想做的是:
等待1秒。播放(0,真)
等待1秒播放(0,假)
等待1秒。播放(1,真)
等待1秒 再见播放(1,假)
watch: {
turn: function(turn) {
if (this.turn === 0) {
var self = this;
var time = 500;
var timeArray = [[],[]]; // I tried with and without this array
for (var i = 0; i < this.challenge.length; i ++) {
timeArray[0][i] = setTimeout(function() {
self.play(i, true);
}, time);
timeArray[1][i] = setTimeout(function() {
self.play(i, false);
this.time += 1500; // // I tried with and without this
}, time + 1000);
}
}
}
}
观察:{
转弯:功能(转弯){
如果(this.turn==0){
var self=这个;
var时间=500;
var timeArray=[],[]];//我尝试使用和不使用此数组
for(var i=0;i
没有阵列,我只是一次播放所有内容,偶尔会发出我能够检测到的声音。对于数组,这只是对象错误。如果以后不需要引用超时,为什么还要创建数组?您只需“手动”将计时器间隔1秒
//模拟代码:
var挑战=[0,1,2,3];
for(设i=0;i<2*challenge.length;i++){
setTimeout(函数(){
游戏(数学楼层(i/2),i%2==0);
},1000*i);
}
功能播放(音频索引、播放动作){
如果(玩动作){
console.log(“播放音频:+audioIndex”);
}否则{
console.log(“停止音频:+audioIndex”);
}
}
如果以后不需要引用超时,为什么还要创建数组?您只需“手动”将计时器间隔1秒
//模拟代码:
var挑战=[0,1,2,3];
for(设i=0;i<2*challenge.length;i++){
setTimeout(函数(){
游戏(数学楼层(i/2),i%2==0);
},1000*i);
}
功能播放(音频索引、播放动作){
如果(玩动作){
console.log(“播放音频:+audioIndex”);
}否则{
console.log(“停止音频:+audioIndex”);
}
}
非常感谢。在将var改为let(我不理解,现在开始学习)并使用巧妙的乘以2后,它终于起作用了。我的游戏功能和你自己写的一样。但我不能停止思考我的代码中到底是什么出了故障。(我指的是没有我无可救药地尝试过的不必要的数组的那一个)良好的观察,从var
到let
的变化不仅仅是花哨的措辞,它非常重要并且具有非常不同的效果。当您在for循环中创建一个函数(例如在setTimeout内)并使用var
声明i
时,每个函数都将收到i
的最终值作为其参数<代码>让解决此问题。查看并通读答案,特别是ES6答案。非常感谢。在将var改为let(我不理解,现在开始学习)并使用巧妙的乘以2后,它终于起作用了。我的游戏功能和你自己写的一样。但我不能停止思考我的代码中到底是什么出了故障。(我指的是没有我无可救药地尝试过的不必要的数组的那一个)良好的观察,从var
到let
的变化不仅仅是花哨的措辞,它非常重要并且具有非常不同的效果。当您在for循环中创建一个函数(例如在setTimeout内)并使用var
声明i
时,每个函数都将收到i
的最终值作为其参数<代码>让解决此问题。查看并通读答案,尤其是ES6答案