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)
用于停止声音。我想做的是:

  • 播放(0,真)
    等待1秒。
    播放(0,假)
    等待1秒
  • 播放(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答案