用JavaScript 帮我写一个消息队列 收到消息后执行完成再执行下一条消息
时间: 2024-03-12 18:42:56 浏览: 11
好的,以下是一个简单的JavaScript消息队列实现:
```javascript
class MessageQueue {
constructor() {
this.queue = [];
this.isExecuting = false;
}
addMessage(message, callback) {
this.queue.push({ message, callback });
if (!this.isExecuting) {
this.executeNextMessage();
}
}
executeNextMessage() {
if (this.queue.length === 0) {
this.isExecuting = false;
return;
}
this.isExecuting = true;
const nextMessage = this.queue.shift();
nextMessage.message(() => {
if (nextMessage.callback) {
nextMessage.callback();
}
this.executeNextMessage();
});
}
}
```
使用方式:
```javascript
const queue = new MessageQueue();
queue.addMessage((callback) => {
console.log('Message 1');
setTimeout(callback, 1000);
});
queue.addMessage((callback) => {
console.log('Message 2');
setTimeout(callback, 500);
});
queue.addMessage((callback) => {
console.log('Message 3');
setTimeout(callback, 2000);
});
// Output:
// Message 1
// (1 second delay)
// Message 2
// (0.5 second delay)
// Message 3
// (2 second delay)
```
以上代码实现了一个简单的消息队列,每次添加一个消息时,都会将其插入队列中,并检查当前是否正在执行队列中的消息。如果不是,则会调用 `executeNextMessage` 方法,开始执行队列中的下一条消息。在执行每个消息时,会将其回调函数作为参数传递给消息函数,并在消息函数完成后调用回调函数,以便通知消息队列已完成该消息。这样就可以确保每条消息都在前一条消息完成后执行。