[英]Javascript - Build an async interface around an async WebSocket
我想知道是否有可能围绕 webSocket object 构建一个异步接口,它本质上是异步的。
webSockect object 在一个类/函数中,该类/函数发布了许多方法:我想调用这个方法,通过 websocket 发送命令,等待回复并回忆标准方法.then
或.catch
- 像 javascript 一样思考Promise
。
function x() {
myWS.sendCmdA().then( function() { doSomething; });
}
function myWS(){
var ws = null;
this.open = function() {
ws = new WebSocket(....);
ws.open = function() { ... };
ws.onmessage = function () { ... };
}
this.sendCmdA = function () {
ws.send("ABCD");
}
}
或者最好在调用中传递一个回调函数,比如
myWS.sendCmdA( fnOk, fnErr);
?
这是我最终采用的解决方案:
添加了两个 arrays 来存储两个可能的回复
var _resolved=[]; var _rejected=[];
对于每个请求,我定义了一个 Promise 如下:
this.ambd002GetLocks = function(locks){ return new Promise( function( resolve, rejected){ _resolved['ambd002'] = resolve; _rejected['ambd002'] = rejected; ws.send("{\"parn1\":"+locks+", \"cmd\":\"ambd002GetLocks\"}"); } ); }
当我收到 onmessage 处理程序的回复时,我检查结果并使用指定的索引调用存储的 function 之一:
ws.onmessage = function got_packet(msg) { console.info("RxWs: " + msg.data); ... case "ambd002GetLocks": if (obj.v=="ok"){ _resolved['ambd002'](obj); } else { _rejected['ambd002'](obj); } break; ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.