我正在使用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)?设置颜色
答案 0 :(得分:3)
问题很可能出在你的循环中。我认为它是一个非常标准的for
循环,在这种情况下,这种行为是预期的。当你打电话:
for(var i=0; i<5; ++i) {
setTimeout(someFunction, 2000);
}
setTimeout
方法将在一个时刻连续调用5次。这意味着someFunction
将在2000毫秒后连续调用5次。
答案 1 :(得分:0)
您的sphero
变量的作用域超出了超时范围。因此,每次打开连接时,之前添加的回调都将同时触发,因为您只是添加到全局范围的sphero
变量。
尝试在sphero
回调中定义Meteor.setTimeout
(目前未显示上面的代码),而不是在其外部。