【问题标题】:How to disconnect from events如何与事件断开连接
【发布时间】:2017-11-24 09:52:54
【问题描述】:

我创建了一个 js 脚本,它订阅了两个不同的事件:

function testDoubleEvents() {
    alert("started");
    var eventName1 = "LeftBumperPressed";
    var eventName2 = "RightBumperPressed";

    session.service("ALMemory").done(function (ALMemory) {
        alert("ALMemory ok");
        ALMemory.subscriber(eventName1).done(function(subscriber1) {
            alert("subscribed1");
            subscriber1.signal.connect(function(result1){
                alert(eventName1);
            });
        });

        ALMemory.subscriber(eventName2).done(function(subscriber2) {
            alert("subscribed2");
            subscriber2.signal.connect(function(result2){
                alert(eventName2);
            });
        });

    });
}
  1. 第一次发生此事件时如何取消订阅该事件?
  2. 当其中一个事件首次发生时,如何取消订阅这两个事件?

【问题讨论】:

    标签: javascript nao-robot pepper


    【解决方案1】:

    您需要使用连接 ID 调用 disconnect,但您需要保留对所有这些订阅者和连接的引用。在这里,eventName1 将在第一次发生时断开连接,而 eventName2 将两者都断开连接。

    function testDoubleEvents() {
        alert("started");
        var eventName1 = "LeftBumperPressed";
        var eventName2 = "RightBumperPressed";
        var subscriber1 = 0;
        var subscriber2 = 0;
        var connectionId1 = 0;
        var connectionId2 = 0;
    
        session.service("ALMemory").done(function (ALMemory) {
            alert("ALMemory ok");
            ALMemory.subscriber(eventName1).done(function(subscriber) {
                subscriber1 = subscriber;
                alert("subscribed1");
                subscriber1.signal.connect(function(result1){
                    alert(eventName1);
                    subscriber1.signal.disconnect(connectionId1);
                }).then(function(connection) { 
                    connectionId1 = connection; 
                });
            });
    
            ALMemory.subscriber(eventName2).done(function(subscriber) {
                alert("subscribed2");
                subscriber2 = subscriber;
                subscriber2.signal.connect(function(result2){
                    alert(eventName2);
                    subscriber2.signal.disconnect(connectionId2);
                    subscriber1.signal.disconnect(connectionId1);
                }).then(function(connection) { 
                    connectionId2 = connection; 
                });
            });
    
        });
    }
    

    为了记录,文档在这里:http://doc.aldebaran.com/2-5/dev/js/index.html

    【讨论】:

      【解决方案2】:

      这样就够了吗?

      alert("subscribed1");
              subscriber1.signal.connect(function(result1){
                  alert(eventName1);
                  subscriber1.signal.disconnect()
              });
      

      http://doc.aldebaran.com/2-5/dev/js/index.html?highlight=javascript#signals

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-30
        • 2021-06-27
        • 1970-01-01
        • 2013-08-01
        相关资源
        最近更新 更多