直接上代码:
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 ?
我是在小程序切换到后台后会关闭连接,但是当用户频繁切换到后台会导致 socket 请求 超过五个,已经关闭的连接怎么也算在同时发起的个数里面
请问解决了吗,这个是解决方案吗
确实,我close了也没法开辟超过5个
自己解决了问题:不能使用 "forEach" 改用 "for" 就可以了;使用forEach还是会并发执行异步操作。
wx.connectSocket 之后会返回一个 socketTask
在发起链接的时候 connectSocket 需要接收返回的对象,如果监听和关闭
请查api中SocketTask 相关的api
SocketTask.close()
// ws就是返回SocketTask
var ws = wx.connectSocket({...});
ws.onMessage((res) => {
resolve(res);
// 收接到结果后关闭
ws && ws.close();
});