Как отписаться от логов/событий?

Существует два способа подписки/просмотра логов/событий:

Подписаться:

var subscription = web3.eth.subscribe('logs', {
    address: '0x123456..',
    topics: ['0x12345...']
}, function(error, result){
    if (!error)
        console.log(log);
});

Отписаться:

subscription.unsubscribe(function(error, success){
    if(success)
        console.log('Successfully unsubscribed!');
});

Но как мне отписаться, если я смотрю логи/события вот так:

myContractWebsocket.events.MyLogName({
    filter: {'orderId': '0x123456...'}, 
    fromBlock: 0
    })
    .on('data', data => { console.log(data); })
    .on('error', error => { console.log(error); });

Ответы (2)

С этим тоже боролся, вот мое решение:

Настройка события

let subscriptionId;
const eventEmitter = web3.contract.events.MyEvent({...options})
   .on('connected', id => subscriptionId = id)
   .on('data', event => {
      // Your event logic
    })

Отписаться

// Unsubscribe if connected successfully and not undefined
if(!subscriptionId) return
eventEmitter.options.requestManager.removeSubscription(subscriptionId)

myContractWebsocket.events.MyLogNameвозвращает Subscriptionответ, который имеет метод отказа от подписки. Подробнее см. здесь .

К сожалению, это так не работает. Я получаю TypeError: подписка.отписаться не является функцией
@RobMagier, не могли бы вы добавить код попытки этого ответа вместе с ошибкой в ​​вопрос?