ws.onmessage = async () => {
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
await wait(50); // await between executions
// do your code
}
Обновление:
См. Этот пример кода ниже.Вы сказали, что у вас есть функция цикла.Может быть, вам будет полезно, если у вас есть доступ к очереди событий каждый цикл, и вы никогда не имеете более одного события в очереди.
let done = false;
setTimeout(() => {
done = true
}, 5);
const eventLoopQueue = () => {
return new Promise(resolve =>
setImmediate(() => {
console.log('event loop');
resolve();
})
);
}
const run = async () => {
while (!done) {
console.log('loop');
await eventLoopQueue();
}
}
run().then(() => console.log('Done'));
Что происходит здесь.Вы вызываете функцию eventLoopQueue () каждый цикл.Эта функция выдвигает обратный вызов в очередь с помощью setImmidiate ().Обратный вызов выполняется сразу же, и все, что находится в очереди, также будет выполнено.Таким образом, каждый цикл вы очищаете очередь.И я верю, что это поможет вам.