Javascript - 围绕异步 WebSocket 构建一个异步接口



我想知道是否有可能围绕webSocket对象构建一个异步接口,本质上是异步的。

webSockect 对象位于发布许多方法的类/函数中:我想调用此方法,通过 websocket 发送命令,等待回复并调用标准方法作为.then.catch- 像 javascriptPromise一样思考。

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);

这是我采用的最终解决方案:

  • 添加了两个数组来存储两个可能的回复

    var _resolved=[];
    var _rejected=[];
    
  • 对于每个请求,我定义了一个承诺,如下所示:

    this.ambd002GetLocks = function(locks){
    return new Promise(
    function( resolve, rejected){
    _resolved['ambd002'] = resolve;
    _rejected['ambd002'] = rejected;
    ws.send("{"parn1":"+locks+", "cmd":"ambd002GetLocks"}");
    }
    );
    }
    
  • 当我收到对 onmessage 处理程序的回复时,我会检查结果并使用指定的索引调用存储的函数之一:

    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;
    ...
    

最新更新