簡體   English   中英

Javascript - 圍繞異步 WebSocket 構建一個異步接口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM