最近在做一个UDP广播,并接收反馈信息进行显示输出,设置的超时时间是6秒,但在接收反馈信息的6秒中,我不能进行其它的操作,我必须等6秒结束才能操作其它数据

问题遇到的现象和发生背景

最近在做一个UDP广播,并接收反馈信息进行显示输出,设置的超时时间是6秒,但在接收反馈信息的6秒中,我不能进行其它的操作,我必须等6秒结束才能操作其它数据。应该是线程阻塞的问题,DatagramSocket的receive()方法会阻塞线程,请问有什么办法可以解决吗?在uniapp中

用代码块功能插入代码,请勿粘贴截图

return new Promise((resolve, reject) => {
                    console.log("----------------------- bindBroadcast -----------------------")
                    //引入需要用到的安卓包
                    let DatagramPacket = plus.android.importClass('java.net.DatagramPacket'); //udp接收信息引用的java类
                    let DatagramSocket = plus.android.importClass('java.net.DatagramSocket'); //udp创建udp引用java类
                    let InetAddress = plus.android.importClass('java.net.InetAddress'); //绑定ip引用java类
                    let NetworkInterface = plus.android.importClass('java.net.NetworkInterface'); //获取主机ip
                    let JString = plus.android.importClass('java.lang.String'); //字符串转换类

                    let socket;
                    let port = that.port; //广播端口
                    let getPort = that.getPort; //本机端口
                    let timeout = 6000; //超时时间
                    let address = that.ip;
                    let getData = [];

                    try {

                        if (DatagramSocket == undefined) {
                            return;
                        }
                        // 创建广播地址 
                        let ip = InetAddress.getByName(address);

                        // 绑定本机接收UDP反馈消息的端口号
                        socket = new DatagramSocket(getPort);

                        // 设置接收超时时长   
                        socket.setSoTimeout(timeout);

                        // 发送广播数据                     
                        let sendData = Array.prototype.slice.call((new Buffer(`hello server`)), 0);
                        let sendPacket = new DatagramPacket(sendData, sendData.length, ip, port);
                        console.log('广播地址:' + ip.getHostAddress(), '端口号:' + sendPacket.getPort())
                        socket.send(sendPacket);

                        // 接收数据
                        let isReceive = true;

                        while (isReceive) {
                            try {
                                // 设置接收缓存,需要用0填充,否则为 null 无法接收。   
                                let buffer = new Array(1024).fill(0);
                                let packet = new DatagramPacket(buffer, buffer.length);

                                socket.receive(packet);
                                let data = new JString(packet.getData()).trim();
                                if (data.length == 0) {
                                    // 接收超时,结束接收  
                                    isReceive = false;
                                } else {
                                    console.log('=====收到数据======', data);
                                    getData.push(data)
                                }

                            } catch (ex) {
                                socket.close();
                                isReceive = false;
                                console.log('接收数据失败:' + ex.message)
                            }
                        }
                    } catch (ex) {
                        console.log('========出错了=======', ex);

                    } finally {
                        if (socket != undefined) {
                            socket.close();
                        }
                        return resolve(getData)    
                    }
                })

我想要达到的结果

我想要在这个方法执行时,我可能操作别的方法。我尝试将它写成异步的方法,但还是不行

异步不行的原因是什么

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^