Meteor.setTimeout 不会造成延迟
Posted
技术标签:
【中文标题】Meteor.setTimeout 不会造成延迟【英文标题】:Meteor.setTimeout is not causing delay 【发布时间】:2014-08-06 09:13:20 【问题描述】:我正在使用 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)?设置颜色
【问题讨论】:
【参考方案1】:问题很可能出在您的循环中。我认为这是一个非常标准的for
循环,在这种情况下,这种行为是意料之中的。当你打电话时:
for(var i=0; i<5; ++i)
setTimeout(someFunction, 2000);
setTimeout
方法将在单个时刻连续调用 5 次。这意味着someFunction
将在 2000 毫秒后连续调用 5 次。
【讨论】:
【参考方案2】:您的 sphero
变量的范围超出了超时时间。因此,每次打开连接时,先前添加的回调都会同时触发,因为您只是添加到全局范围的 sphero
变量。
尝试在Meteor.setTimeout
回调内部而不是外部定义sphero
(当前未在上面的代码中显示)。
【讨论】:
以上是关于Meteor.setTimeout 不会造成延迟的主要内容,如果未能解决你的问题,请参考以下文章