websocket同步问题(解决同时最多发起 5 个 socket 请求限制)?
发布于 5 年前 作者 xia50 3600 次浏览 来自 问答

直接上代码:

var getState = function (url{
  return new Promise(resolve => {
     var ws = wx.connectSocket({
      url: url,
      data: {},
      method'GET',
      success(res) {},
      fail() {}
    });
       ws.onOpen((res) => {
          ws.send({data"发送请求"});
       });
       ws.onMessage((res) => {
         resolve(res);
         ws && ws.close();
       });
  });
 }
// 调用
arrData.forEach(async (item, index) => {
    await getState(url).then((res) => {
       console.log('处理中...' + index);
    });
    console.log('成功处理!' + index);
});

// 错误提示:
处理中...0
成功处理!0
处理中...1
成功处理!1

同时最多发起 5 个 socket 请求,更多请参考文档
Uncaught (in promise) thirdScriptError
{"errMsg":"closeSocket:fail task not found"}
Object

可以同步,但好像关不了socket ?

2 回复

自己解决了问题:不能使用 “forEach” 改用 “for” 就可以了;使用forEach还是会并发执行异步操作。

wx.connectSocket 之后会返回一个 socketTask

在发起链接的时候 connectSocket 需要接收返回的对象,如果监听和关闭

请查api中SocketTask 相关的api


SocketTask.close()


回到顶部