【问题标题】:Websockets - pass data outside of onmessage()Websockets - 在 onmessage() 之外传递数据
【发布时间】:2017-05-12 22:24:12
【问题描述】:

我的 WebExtension 连接到 WebSockets 服务器以检索数据。

function foo(responseDetails){
    var ws = new WebSocket("ws://localhost:9876/");

    ws.onopen = function(event){
        // send some data to the server
        ws.send("some data");
    }

    ws.onmessage = function(event){
        // receive some data from the server
        data = event.data;
    }

    // how to access the data from here?
    if(data == 0)
        return {cancel:true}
    else
        return {cancel:false}
}

browser.webRequest.onBeforeRequest.addListener(
        foo, 
        {urls:["*//*/*"]},
        ["blocking"]
)

当一个请求完成时,函数foo()被调用,它打开一个到ws://localhost:9876的WebSocket,发送一个字符串,然后接收data。数据决定了请求是否会被阻塞。

看完the answers here,我还是一头雾水。我不确定如何在函数 foo() 中实现回调。

Similar question 但答案不是我想要的。

【问题讨论】:

    标签: javascript websocket firefox-addon-webextensions


    【解决方案1】:

    您可以在这个确切的用例中使用 Promise,如下所示应该可以:

    function foo(responseDetails) {
      return new Promise(function(resolve) {
        var ws = new WebSocket("ws://localhost:9876/");
    
        ws.onopen = function(event) {
          // send some data to the server
          ws.send("some data");
        }
    
        ws.onmessage = function(event) {
          // receive some data from the server
          var data = event.data;
          if (data == 0) {
            resolve({
              cancel: true
            });
          } else {
            resolve({
              cancel: false
            })
          }
        }
      });
    }
    
    browser.webRequest.onBeforeRequest.addListener(
      foo, {
        urls: ["*//*/*"]
      }, ["blocking"]
    )
    

    更多信息可以找到here

    【讨论】:

    • 第 24 行出现语法错误。我尝试重写代码,但没有成功。仍然发生在第 24 行 pastebin.com/LY8epTAQ
    • 我应该把WebSocket定义new WebSocket("ws://localhost:9876")放在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2011-06-20
    • 1970-01-01
    相关资源
    最近更新 更多