我有一个打开的 Websocket 连接,它正在分发事件。一切都很好,但是一旦一个新事件到来,我需要做很多事情,有时事件一个接一个地到来得太快,以至于没有时间把事情做好。我需要在这个函数中有某种队列,告诉事件放轻松,每秒最多只继续进行一次,否则在某种队列中等待,直到第二个过去,然后继续。
编辑:不幸的是,不允许使用外部库。
ws = new WebSocket(`wss://hallo.com/ws/`);
ws.onmessage = readMessage;
async function readMessage(event) {
print(event)
//do important things
//but not too frequently!
}
我该怎么做?
我找到了 this但这超出了我简单的头脑:
“你可以有一个类似队列的 promise ,它不断积累 promise 以确保它们按顺序运行:
let cur = Promise.resolve();
function enqueue(f) {
cur = cur.then(f); }
function someAsyncWork() {
return new Promise(resolve => {
setTimeout(() => {
resolve('async work done');
}, 5);
}); } async function msg() {
const msg = await someAsyncWork();
console.log(msg); }
const main = async() => {
web3.eth.subscribe('pendingTransactions').on("data", function(tx) {
enqueue(async function() {
console.log('1st print: ',tx);
await msg();
console.log('2nd print: ',tx);
});
}) }
main();
”
最佳答案
老实说,我会使用像 lodash 的 throttle 这样的东西去做这个。以下代码段应该可以解决您的问题。
ws = new WebSocket(`wss://hallo.com/ws/`);
ws.onmessage = _.throttle(readMessage, 1000);
async function readMessage(event) {
print(event)
//do important things
//but not too frequently!
}
关于javascript - 如何在 javascript 中对传入的 websocket 事件进行排队以执行缓慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72695396/