我有一系列从解码折线返回的lat / lng对。
使用Resolved Bug
我提取每个lat / lng对并使用forEach
,将此数据发送到频道。
pubnub.publish()
是一个异步函数,我需要在pubnub.publish()
循环的每一步都延迟发布消息。
我已经查看了很多关于setTimeout立即执行的答案并尝试了下面的不同版本,包括不将forEach
包装在一个闭包中,但是我无法延迟发布 - 它只是将它们全部发送出去一旦它可以。
有人能指出任何明显的错误吗?
setTimeout
答案 0 :(得分:2)
forEach循环将近乎实时执行,这意味着所有超时几乎完全同时完成,你应该在每次迭代中将超时值增加2000;也许这适合你:
var sendmsg = function (value) {
pubnub.publish({
channel: id,
message: value,
callback: function (confirmation) {
console.log(confirmation);
},
error: function (puberror) {
console.log('error: ' + puberror);
}
});
};
var timeoutVal = 2000;
decodedPolyline.forEach(function (rawPoints) {
var value = {
lat: rawPoints[0],
lng: rawPoints[1]
};
(function(value) {
setTimeout(function() {
sendmsg(value);
}, timeoutVal);
})(value);
//Add 2 seconds to the value so the next iteration the timeout will be executed 2 seconds after the previous one.
timeoutVal = timeoutVal + 2000;
normalised.push(value);
});
我还在循环外移动了sendmsg
函数的定义。我相信如果你不为每次迭代定义函数,它会更有效。希望这会有所帮助。