2

我正在使用 Spheron 智能包创建我的第一个 Meteor 应用程序。我可以控制他的 sphero ok 并改变它的颜色,但我试图在颜色变化之间产生延迟。
这是我的代码:

function makePrettyLights(sphero,color){   
    var colors = [];
    colors['red'] = '0xB36305';
    colors['green'] = '0xE32017';
    colors['blue'] = '0xFFD300';

    console.log(color);

    var spheroPort = '/dev/tty.Sphero-OBB-RN-SPP';
    var timer = 2000;
    Meteor.setTimeout(function(){

        sphero.on('open', function() {
            sphero.setRGB(colors[lineName], false);
        });
        sphero.open(spheroPort);

    },2000);
}

正在循环中调用此函数。我没有包含循环,它涉及我解析一些 xml 和其他位,但它可以工作。

if (Meteor.isServer) {
   /**** Loop Code Here ****/
   makePrettyLights(sphero,color)
   /****End Loop Code ****/
}

我还尝试在调用它的函数周围设置超时包装器,而不是在它内部。
但基本上它们都同时在我的代码末尾运行。
I20140806-09:49:35.946(1)?设置颜色
I20140806-09:49:35.946(1)?设置颜色
I20140806-09:49:35.946(1)?设置颜色

4

2 回答 2

3

问题很可能出在您的循环中。我认为这是一个非常标准的for循环,在这种情况下,这种行为是可以预期的。你打电话时:

for(var i=0; i<5; ++i) {
  setTimeout(someFunction, 2000);
}

setTimeout方法将在单个时刻连续调用 5 次。这意味着someFunction将在 2000 毫秒后连续调用 5 次。

于 2014-08-06T09:45:32.443 回答
0

您的sphero变量在超时范围之外。因此,每次打开连接时,先前添加的回调将同时触发,因为您只是添加到全局范围的sphero变量。

尝试在回调内部而不是外部定义sphero(当前未在上面的代码中显示) 。Meteor.setTimeout

于 2014-08-06T09:45:08.333 回答