gpt4 book ai didi

javascript - 在 node.js 中延迟执行异步消息传递功能

转载 作者:行者123 更新时间:2023-11-30 16:45:15 24 4
gpt4 key购买 nike

我有一系列从解码折线返回的纬度/经度对。

使用 forEach 我提取每个经纬度对并使用 pubnub.publish() 将此数据发送到 channel 。

pubnub.publish() 是一个异步函数,我需要通过 forEach 循环在每一步延迟消息的发布。

我查看了很多关于立即执行 setTimeout 的答案,并尝试了下面的不同版本,包括不将 setTimeout 包装在闭包中,但我无法延迟发布 - 它只是尽快将它们全部发送出去。

谁能指出任何明显的错误?

decodedPolyline.forEach(function (rawPoints) {

var value = {
lat: rawPoints[0],
lng: rawPoints[1]
};

var sendmsg = function () {
pubnub.publish({
channel: id,
message: value,
callback: function (confirmation) {
console.log(confirmation);
},
error: function (puberror) {
console.log('error: ' + puberror);
}
});
};

(function() {
setTimeout(sendmsg, 2000);
})();

normalised.push(value);
});

最佳答案

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 函数的定义移到了循环之外。我相信如果您不为每次迭代都定义函数,它的性能会更高一些。希望这会有所帮助。

关于javascript - 在 node.js 中延迟执行异步消息传递功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31345947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com