带有回调的本机消息postMessage

柯克·巴科斯(Kirk Ba​​ckus)

因此,我创建了一个端口

var port = chrome.runtime.connectNative("my.native.app");

我会定义

port.onMessage.addListener(onNativeMessage);
port.onDisconnect.addListener(onDisconnect);

所以当我打电话

port.postMessage({"text":"messsage"});

它使用标准输入/输出进入我的本机应用程序,我得到了响应。

这是我的问题:我有几个期望得到响应的函数,而另一些则没有。我希望能够发布一条消息并等待来自本机应用程序(正在持续运行)的响应。怎么做?

我知道通过“一次消息传递”sendMessageNative可以很好地工作,除了我将本机应用程序用作状态机外,因此它会在完成后杀死我的应用程序,这不好。

可汗

您可以添加另一个侦听器onNativeMessage来调用您的回调,然后注销。

像这样的东西,带有闭包:

function callbackOnId(ev, id, callback) {
  var listener = ( function(port, id) {
    var handler = function(msg) {
      if(msg.id == id) {
        ev.removeListener(handler);
        callback(msg);
      }
    }
    return handler;
  })(ev, id, callback);
  ev.addListener(listener);
}

/* ... */
callbackOnId(port.onMessage, "someRequestId", callback);
port.postMessage({"text":"message", "id": "someRequestId"});

现在,第一次你的端口接收到包含消息"id": "someRequestId"callback将与该消息,在此之后,听众将注销本身被调用。

如果需要,可以添加删除侦听器和/或修改消息检查的功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有本机异步回调的 TaskCompletionSource 在 C# 中不起作用

来自分类Dev

没有回调的JavaScript本机Promise()

来自分类Dev

带有回调的功能

来自分类Dev

带有传入变量的SlideUp回调?

来自分类Dev

避免带有承诺的嵌套回调

来自分类Dev

带有回调的Pyro4

来自分类Dev

带有OOP方法的Tkinter回调

来自分类Dev

带有回调参数的共享方法

来自分类Dev

带有回调的XTerm -e选项

来自分类Dev

存入带有回调的函数

来自分类Dev

带有回调 JS 的递归函数

来自分类Dev

消息队列回调

来自分类Dev

反应本机Swift回调

来自分类Dev

回调Javascript PostMessage iOS Swift

来自分类Dev

Redis pubsub消息队列,但具有回调,如ZeroMQ

来自分类Dev

多次顺序调用带有回调的函数会导致回调地狱

来自分类Dev

多次顺序调用带有回调的函数会导致回调地狱

来自分类Dev

Moq异步回调失败,带有多个参数

来自分类Dev

Python并发使用带有回调的子流程

来自分类Dev

TypeError:回调不是nodeJS中带有asyncJS的函数

来自分类Dev

在回调中使用带有参数的函数

来自分类Dev

Facebook喜欢并分享带有回调的按钮

来自分类Dev

带有回调的唯一数组值

来自分类Dev

带有身份验证的DataSnap回调

来自分类Dev

带有FormData的Ajax回调对于大型文件失败

来自分类Dev

Qt中带有进度回调的CopyFileEx

来自分类Dev

使用带有回调的Spring SimpleJdbcCall调用存储过程

来自分类Dev

带有参数的Python Matplotlib回调函数

来自分类Dev

带有无效指针参数的回调产生警告