你可以使用React和JavaScript中的async/await来实现这个功能。下面是一个用React实现的示例代码:

import React, { useEffect, useState } from 'react';

const MessageSender = () => {
  const [messages, setMessages] = useState([
    'Message 1',
    'Message 2',
    'Message 3',
  ]);
  const [currentMessage, setCurrentMessage] = useState('');
  const [response, setResponse] = useState('');

  useEffect(() => {
    sendMessage();
  }, []);

  const sendMessage = async () => {
    if (messages.length > 0) {
      const message = messages[0];
      setMessages((prevMessages) => prevMessages.slice(1));
      setCurrentMessage(message);

      try {
        const response = await sendMessageToServer(message);
        setResponse(response);
        // 继续发送下一条消息
        sendMessage();
      } catch (error) {
        console.error(error);
      }
    }
  };

  const sendMessageToServer = (message) => {
    return new Promise((resolve, reject) => {
      // 模拟发送消息到服务器
      setTimeout(() => {
        // 假设服务器总是返回 'OK' 作为回复
        resolve('OK');
      }, 1000);
    });
  };

  const handleInputChange = (event) => {
    setCurrentMessage(event.target.value);
  };

  const handleSubmit = (event) => {
    event.preventDefault();
    setMessages((prevMessages) => [...prevMessages, currentMessage]);
    setCurrentMessage('');
  };

  return (
    <div>
      <h1>Message Sender</h1>
      <form onSubmit={handleSubmit}>
        <input
          type='text'
          value={currentMessage}
          onChange={handleInputChange}
        />
        <button type='submit'>Send</button>
      </form>
      <p>Response: {response}</p>
    </div>
  );
};

 export default MessageSender;

在这个示例中,messages数组保存待发送的消息。使用useState来管理messages数组、当前消息currentMessage和服务器的回复responseuseEffect在组件加载时调用sendMessage函数。sendMessage函数使用async/await来发送消息并等待服务器的回复,然后递归调用sendMessage函数发送下一条消息。sendMessageToServer函数模拟了发送消息到服务器的过程,使用setTimeout来模拟异步操作。handleInputChangehandleSubmit函数用于处理用户输入的消息。

这是一个简单的示例,你可以根据实际需求进行修改和扩展。

React 异步发送消息并循环:使用 async/await 实现消息队列

原文地址: https://www.cveoy.top/t/topic/pVvf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录